ITPub博客

首页 > IT职业 > IT生活 > LeetCode-N7-反转整数

LeetCode-N7-反转整数

IT生活 作者:田野 时间:2021-09-09 09:12:27 0 删除 编辑

原题链接

给定一个 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开发方面的文章哦~

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3522/viewspace-2800540/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-09

  • 博文量
    80
  • 访问量
    760