为了账号安全,请及时绑定邮箱和手机立即绑定

LeetCode-N7-反转整数

标签:
Java 算法

原题链接

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消