15303105423 发表于 3 天前

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

https://dajuwangluo.cn/zb_users/upload/2025/07/202507251753450399618816.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;
    }
};
C++

六、常见错误
[*]忽略负数情况
[*]溢出检查不完整
[*]使用64位整数存储中间结果
来源:力扣第7题:从零理解整数反转
页: [1]
查看完整版本: 力扣第7题:从零理解整数反转