看题目中给的例子:
Example1: x = 123, return 321
Example2: x = -123, return -321
我们可以结合取余数(%),和 /10 的操作写出初级版的代码。
在这初级版的代码,考虑了x为负数的时候。
代码:
public int reverse(int x) {
int result = 0;
boolean isNeg = x < 0;
x = Math.abs(x);
while (x > 0) {
result = result * 10 + x % 10;
x /= 10;
}
return isNeg ? - result : result;
}
接下来,我们需要解决1个问题:
1. x逆转的结果会溢出的时候。(超过Integer.MAX_VALUE)
所以如何 确定 * 10以后就会溢出呢?
如果假设溢出,可以推出: result * 10 + x % 10 > Integer.MAX_VALUE
从而推导出: (Inter.MAX_VALUE - x % 10 )/10 < result
所以,我们只需要再额外增加一个预判 : (Inter.MAX_VALUE - x % 10 )/10 < result 就可以了
如果条件成立,直接返回0.
AC代码:
public int reverse(int x) {
int result = 0;
boolean isNeg = x < 0;
x = Math.abs(x);
while (x > 0) {
if ((Integer.MAX_VALUE - x % 10) / 10 < result) {
return 0;
}
result = result * 10 + x % 10;
x /= 10;
}
return isNeg ? -result : result;
}