继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕仔1528358
关注TA
已关注
手记 33
粉丝 0
获赞 0

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位整数存储中间结果

来源:力扣题解


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP