思路
- 最初在想要是能把每个数字放到一个数组里面,最后反转一下数组就可以了。
- 然后想到其实并不需要数组储存,其实可以通过迭代不断地更新。
result = result * 10 + digit
- 剩下的就是判断overflow的问题。
- 最小的Int是-2,147,483,648, 最大的是2,147,483,647
- 如果现在
result
大于MAX_VALUE/10
, 那么result = result * 10 + digit
一定会overflow
- 如果
result
大于MAX_VALUE/10
,那么当digit
大于7的时候,result = result * 10 + digit
一定会overflow
- 负数同理
代码
class Solution {
public int reverse(int x) {
int result = 0;
// 判断正负数
int sign = (x < 0) ? -1 : 1;
while(x != 0) {
// 抽出末位数字
int digit = Math.abs(x % 10);
// 剩下的数字
x = x / 10;
// 判断是否overflow
if (result > (Integer.MAX_VALUE / 10) || (result == (Integer.MAX_VALUE / 10) && digit > 7)) return 0;
if (result < (Integer.MIN_VALUE / 10) || (result == (Integer.MIN_VALUE / 10) && digit > 8)) return 0;
result = result * 10 + digit;
}
result *= sign;
return result;
}
}