LeetCode-N7-反转整数

原题链接

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

这个题是一个数学题,假设输入的数是x,我们可以通过不断地弹出x的最小位的数,把它加到结果中

稍微复杂一点的是题目中提到的反转后越界的判断

先上代码再分析越界是怎么判断的:

class Solution {
    public int reverse(int x) {
        int res = 0;
        while( x != 0) {
            // 处理越界问题
            if (Math.abs(res) > (Integer.MAX_VALUE - Math.abs(x % 10)) / 10)
                return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
}

其实也很简单,我们可以通过这句代码反推:

res = res * 10 + x % 10;

要做越界控制,那么应该有以下的公式成立:

// 假如x是正数
if((res*10 + x % 10 ) > Integet.MAX_VALUE)
    return 0;

但因为int32位的限制问题,显然是不能直接这样写的。于是稍作转换:

// 这里要考虑负数
if (Math.abs(res) > (Integer.MAX_VALUE - Math.abs(x % 10)) / 10)
     return 0;

感谢您的阅读,若您喜欢,可以点击下方的的“推荐”支持我。谢谢!

也可以关注我的慕课账号,会经常更新Java、算法、Vue开发方面的文章哦~

点赞