当前位置:首页 > 力扣题解 > 力扣第7题:从零理解整数反转

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

4周前 (07-28)力扣题解82

截图未命名.jpg 力扣第7题:从零理解整数反转 整数反转 模运算 力扣题解 C++ 第1张

一、问题理解

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


原创内容 转载请注明出处

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。