Leetcode7:整数翻转

原题地址:. - 力扣(LeetCode)

题目描述:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

复制代码
输入:x = 123
输出:321

示例 2:

复制代码
输入:x = -123
输出:-321

示例 3:

复制代码
输入:x = 120
输出:21

示例 4:

复制代码
输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

解题思路

  1. 首先,我们检查输入的整数是否为0,如果是,直接返回0。
  2. 将整数转换为字符串,这样我们可以轻松地处理正负号和每一位数字。
  3. 检查字符串中是否包含负号,如果包含,设置一个标志变量flagtrue
  4. 使用一个栈来存储每一位数字。我们遍历字符串中的每个字符(去掉负号后的数字),并将它们压入栈中。
  5. 使用StringBuilder来构建反转后的字符串。我们从栈中弹出所有元素,并添加到StringBuilder中,实现反转。
  6. 最后,我们尝试将反转后的字符串转换回整数。如果原数为负数,我们需要在反转后的字符串前加上负号。如果转换失败(例如,反转后的数超出了整数的范围),我们返回0。

时间复杂度

时间复杂度是 O(n),其中 n 是输入整数的位数。这是因为我们需要遍历整个字符串一次,将每个字符压入栈中,然后再从栈中弹出。

空间复杂度

空间复杂度是 O(n),因为我们使用了一个栈来存储每一位数字,以及一个StringBuilder来构建反转后的字符串。在最坏的情况下,这两个数据结构都需要存储 n 个字符。

java 复制代码
class Solution {
    /**
     * 将一个整数进行反转。
     * @param x 需要反转的整数
     * @return 反转后的整数
     */
    public int reverse(int x) {
        // 如果输入为0,直接返回0
        if(x == 0) {
            return x;
        }
        
        // 将整数转换为字符串,方便处理正负号和每一位数字
        String b = String.valueOf(x);
        
        // 标记是否为负数
        boolean flag = false;
        if(b.indexOf("-") >= 0) {
            flag = true;
        }
        
        // 使用栈来存储每一位数字,栈的特性是后进先出,方便我们反转数字
        Stack<Character> stack = new Stack<>();
        
        // 将字符串中的每个字符(数字)压入栈中,如果原数为负数,则去掉负号
        for(char c : b.replace("-", "").toCharArray()) {
            stack.push(c);
        }
        
        // 使用StringBuilder来构建反转后的字符串,它比字符串拼接更高效
        StringBuilder sb = new StringBuilder();
        
        // 从栈中弹出所有元素,并添加到StringBuilder中,实现反转
        while(!stack.isEmpty()) {
            Character c = stack.pop();
            sb.append(c);
        }
        
        // 尝试将反转后的字符串转换回整数
        try {
            // 如果原数为负数,则在反转后的字符串前加上负号
            if(flag) {
                return Integer.parseInt("-" + sb.toString());
            } else {
                // 否则直接转换
                return Integer.parseInt(sb.toString());
            }
        } catch(Exception e) {
            // 如果转换失败(例如超出整数范围),则返回0
            return 0;
        }
    }
}
相关推荐
一 乐8 分钟前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
恼书:-(空寄11 分钟前
JVM GC 日志分析 + 常见 GC 场景 + 实战参数调优
java·jvm
消失的旧时光-194318 分钟前
Spring Boot 实战(五):接口工程化升级(统一返回 + 异常处理 + 错误码体系 + 异常流转机制)
java·spring boot·后端·解耦
王老师青少年编程28 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程28 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
_日拱一卒30 分钟前
LeetCode:2两数相加
算法·leetcode·职场和发展
py有趣31 分钟前
力扣热门100题之零钱兑换
算法·leetcode
董董灿是个攻城狮1 小时前
Opus 4.7 来了,我并不建议你升级
算法
无敌昊哥战神1 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__1 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode