题目如下
思路:
既然是反转,那么我只要把最后一位的数字拿出来,推进到结果里,然后让原数字缩小十倍,这样就把原数字的最后一位给挤压出去,此时判断还有数字要向结果里压入么?如果有,那么当前结果×10,就相当于留出了位置。
至于越界,最大值为:2147483647。 最小值为:-2147483648
在对结果推入时。
先判断此时结果是否比MAX_Vaule /10大,如果大于,或者,此时结果等于MAX_Vaule /10 ,下一位要推进的数字大于7,就是比最大值大了
如果是负数那么是否比MIN_Vaule /10小,如果小于,或者,此时结果等于MIN_Vaule /10 ,下一位要推进的数字小于-8,就是比最小值小了。
public int reverse(int x) {
int result = 0;
while(x != 0){
int pop = x % 10; //拿出最后一位数字
x = x / 10; //把最后一位挤压出去
if(result >Integer.MAX_VALUE /10 || result == Integer.MAX_VALUE && pop >7) return 0;
if(result < Integer.MIN_VALUE /10 || result == Integer.MIN_VALUE && pop < -8) return 0;
result = result*10 + pop;//给最后一位数字留出位置
}
return result;
}
时间复杂度:O(log(x)) 一个数字大约有log 10 x位数字.
空间复杂度:O(1)
大佬完善