力扣第7题:从零理解整数反转
一、问题理解
需要将32位有符号整数的数字部分反转
反转后结果必须在[-2³¹, 2³¹-1]范围内
不能使用64位整数存储中间结果
二、算法思路
使用模运算(%)获取数字的最后一位
通过除法(/)移除已处理的数字
逐步构建反转后的数字
三、关键点解析
四、代码实现细节
使用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位整数存储中间结果
原创内容 转载请注明出处