手记

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

一、问题理解

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

来源:力扣题解


0人推荐
随时随地看视频
慕课网APP