找回密码
 立即注册
查看: 20|回复: 0

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

[复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:15
  • 打卡月天数:1
  • 打卡总奖励:117
  • 最近打卡:2025-08-02 15:29:27

21

主题

5

回帖

2388

积分

VIP

积分
2388
发表于 2025-7-29 10:58:01 | 显示全部楼层 |阅读模式
截图未命名.jpg
一、问题理解
  • 需要将32位有符号整数的数字部分反转
  • 反转后结果必须在[-2³¹, 2³¹-1]范围内
  • 不能使用64位整数存储中间结果

二、算法思路
  • 使用模运算(%)获取数字的**一位
  • 通过除法(/)移除已处理的数字
  • 逐步构建反转后的数字

三、关键点解析
  • 负数处理C++的模运算会自动处理负数
  • 溢出检查:在每次累加前预判是否会溢出
  • 边界值:特别注意INT_MAX(2147483647)和INT_MIN(-2147483648)的**一位

四、代码实现细节
  • 使用while循环处理所有数字位
  • 通过INT_MAX/10和INT_MIN/10进行溢出预判
  • 特殊处理**一位数字(7和-8)

五、完整代码
  1. class Solution {
  2. public:
  3.     int reverse(int x) {
  4.         int rev = 0;
  5.         while (x != 0) {
  6.             int pop = x % 10;  // 获取**一位数字
  7.             x /= 10;           // 移除**一位
  8.             
  9.             // 检查是否溢出
  10.             if (rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7)) return 0;
  11.             if (rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8)) return 0;
  12.             
  13.             rev = rev * 10 + pop;  // 构建反转数字
  14.         }
  15.         return rev;
  16.     }
  17. };
复制代码


C++

六、常见错误
  • 忽略负数情况
  • 溢出检查不完整
  • 使用64位整数存储中间结果

来源:力扣题解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SEO网站 ( 冀ICP备2025113422号-2 )|网站地图

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表