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

力扣第7题:从零理解整数反转

标签:
C++

https://img1.sycdn.imooc.com/1457ae68088837ef11270673.jpg

一、问题理解

  • 需要将32位有符号整数的数字部分反转

  • 反转后结果必须在[-2³¹, 2³¹-1]范围内

  • 不能使用64位整数存储中间结果

二、算法思路

  • 使用模运算(%)获取数字的最后一位

  • 通过除法(/)移除已处理的数字

  • 逐步构建反转后的数字

三、关键点解析

  • 负数处理C++的模运算会自动处理负数

  • 溢出检查:在每次累加前预判是否会溢出

  • 边界值:特别注意INT_MAX(2147483647)和INT_MIN(-2147483648)的最后一位

四、代码实现细节

  • 使用while循环处理所有数字位

  • 通过INT_MAX/10和INT_MIN/10进行溢出预判

  • 特殊处理最后一位数字(7和-8)

五、完整代码

class Solution {public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;  // 获取最后一位数字
            x /= 10;           // 移除最后一位
            
            // 检查是否溢出
            if (rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8)) return 0;
            
            rev = rev * 10 + pop;  // 构建反转数字
        }
        return rev;
    }};

六、常见错误

  • 忽略负数情况

  • 溢出检查不完整

  • 使用64位整数存储中间结果

来源:力扣题解


点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消