- 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
-
- 负数的阈比正数大1
-
- 限制条件要卡死,不然就出错
class Solution {
public int reverse(int x) {
boolean neg = ((x >>> 31) & 1) == 1;
x = neg ? x : -x;// 转换为负数进行计算,是因为负数的空间比正数大1个空间
int m = Integer.MIN_VALUE / 10;
int o = Integer.MIN_VALUE % 10;
System.out.println(m);
System.out.println(o);
int res = 0;
while(x != 0) {
// 这个条件是用来防止溢出的,如果res比系统最小还小,乘以10就有可能溢出,
// x % 10比系统最小值模10都小,那么也有可能溢出
if(res < m || (res == m && x % 10 < o)) {
return 0;
}
res = res * 10 + x % 10;
x /= 10;
}
return neg ? res : Math.abs(res);
}
}