1.题目描述
2.解题思路
我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。
此题主要难点是判断是否溢出,因此可事先检查是否会导致溢出。
为了便于解释,我们假设 rev 是正数。
如果 temp = rev⋅10+pop 导致溢出,那么一定有 rev≥ 10/INTMAX。
如果 rev>10/INTMAX ,那么 temp =rev⋅10+pop 一定会溢出。
如果 rev== 10/INTMAX,那么只要pop>7,temp =rev⋅10+pop 就会溢出。
当 rev 为负时可以应用类似的逻辑。
3.代码实现
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}