题目:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
class Solution6 {
public int reverse(int x) {
int res = 0;
while (x != 0) {
// 每次取末尾数字
int tmp = x % 10;
// 判断是否 大于 最大32位整数或者小于 最小32位整数,−2^31 ≤ rev⋅10+digit ≤ 2^31 − 1,化简后得到下面的判断条件
// res==214748364 && tmp>7不需要判断最后一位是否大于7,或者res==-214748364 && tmp<-8小于-8
// 因为要满足条件,他的首位只能是1或2,翻转过来末尾是1或2,一定小于7或者大于-8
if (res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10) {
return 0;
}
// res就是反转后的结果,只要将每次的后面一位乘以10再加上新的一位
res = res * 10 + tmp;
// 每次x去掉一位数字
x /= 10;
}
return res;
}
}