力扣第7题整数反转:简洁高效的C++代码
一、题目解读
LeetCode第7题“整数反转”要求将给定整数x反转后返回,但需考虑整数溢出的边界情况。例如,输入123反转后为321,但若x为1534236469,反转后超出int范围则需返回0。题目核心在于处理数字反转与溢出判断的逻辑设计。
二、解题思路
采用“逐位提取+边界检查”策略:
1. 循环提取末尾数字:通过x % 10获取末尾数,并x /= 10移除末尾位。
2. 溢出预判机制:每次构建反转数rev时,利用INT_MAX/INT_MIN的边界条件判断是否溢出。
3. 临界值优化:针对INT_MAX/INT_MIN的特殊情况(如末尾数为7或-8时),设计精准判断避免误判。
该解法无需额外空间,时间复杂度O(log x)。
三、解题步骤
1. 初始化:定义变量rev=0,用于存储反转结果。
2. 循环处理:
当x≠0时循环:
a. pop = x % 10提取末尾数字。
b. x /= 10移除末尾位。
3. 溢出检查:
若rev即将超过INT_MAX/INT_MIN(通过临界值比较),立即终止并返回0。
4. 构建反转数:rev = rev * 10 + pop,逐步累积反转结果。
5. 返回结果:循环结束后,返回最终rev值。
四、代码与注释
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; } };
五、总结
该解法利用整数边界特性,通过简洁的循环与条件判断,提高效率。核心启示:处理溢出问题时,需结合数据类型边界(如INT_MAX/INT_MIN)设计精准判断逻辑。对算法面试或编程实践中的边界问题具有参考价值。
原创内容 转载请注明出处