class Solution {
public int reverse(int x) {
int rev = 0; // 存储反转结果
// 循环处理每一位数字(包含负数情况)
while (x != 0) {
/* 关键溢出检查:在计算结果前进行预判
Integer.MAX_VALUE = 2147483647 → 214748364
Integer.MIN_VALUE = -2147483648 → -214748364
当 rev 的绝对值已经大于 MAX_VALUE/10 时:
- 若rev为正数,下步乘10后必定超过2147483647(至少变成2147483650)
- 若rev为负数,下步乘10后必定小于-2147483648(至少变成-2147483650)
*/
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0; // 预判溢出立即返回
}
// 获取当前最后一位数字(Java中负数取模仍为负数)
int digit = x % 10; // 示例:-123 % 10 = -3
x /= 10; // 移除已处理的最低位(自动处理正负)
// 构建反转数字(注意负数处理)
rev = rev * 10 + digit; // 关键计算步骤
/* 示例流程(输入123):
迭代1:rev=0*10+3=3
迭代2:rev=3*10+2=32
迭代3:rev=32*10+1=321
*/
}
return rev; // 返回处理后的结果
}
}