//此题主要考点是对溢出的考虑
class Solution {
public int reverse(int value) {
int res = 0;
while(value != 0 ){
int tmp = value % 10;
if(res > 214748364 || res==214748364 && tmp > 7){
return 0;
}
if(res < -214748364 || res==214748364 && tmp < -8){
return 0;
}
res = res*10 + tmp;
value = value / 10;
}
return res;
}
}
题解过程:
123450 => 54321
123450 % 10 => 0 => res = 0*10 + 0
12345 % 10 => 5 => res = 0*10 + 5
1234 % 10 => 4 => res = 5*10 + 4
123 % 10 => 3 => res = 54*10 + 3
12 % 10 => 2 => res = 543*10 + 2
1 % 10 => 1 => res = 5432*10 + 1 = 54321
溢出考虑 32位 => 2147483647 ~ -2147483648 => 214748364|7 ~ -214748364|8
所有只要res > 214748364 那么 任何数都溢出,若等于则判断tmp位置是否大于7
同理只要res < -214748364 那么 任何数都溢出,若等于则判断tmp位置是否小于-8
参考链接:https://leetcode-cn.com/problems/reverse-integer/solution/tu-jie-7-zheng-shu-fan-zhuan-by-wang_ni_ma/
时间复杂度:O(log(x)) 不太理解
空间复杂度:O(1)