查看: 17|回复: 0

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

[复制链接]
  • TA的每日心情
    郁闷
    前天 10:01
  • 签到天数: 32 天

    [LV.5]常住居民I

    31

    主题

    0

    回帖

    62

    积分

    注册会员

    Rank: 2

    积分
    62
    发表于 4 天前 | 显示全部楼层 |阅读模式
    一、问题理解
    • 需要将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位整数存储中间结果

    来源:力扣第7题:从零理解整数反转
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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