题目描述
将一个Int类型的数字进行反转,如果反转结果超出int的范围,返回0
题目思路
问题比较简单,唯一复杂的地方是如果判断超出Integer的范围,基本思路就是先从个位逐位提取,然后在逐位反转。对于判断反转时是否越界,首先我们要知道Int类型的范围是在 也就是 ,所以越位有两种情况:
- 在反转没结束前,当前数 > Integer.MAX_VALUE/10 或者 < Integer.MIN_VALUE/10
- 在反转没结束前,当前数 == Integer.MAX_VALUE/10 并且下一位数>7 或者 Integer.MIN_VALUE/10 并且下一位数<-8
代码如下:
class Solution {
public int reverse(int x) {
int digit = 0;
int res = 0;
while(x!=0) {
// pop
digit = x%10;
x = x/10;
// reverse
if (res>Integer.MAX_VALUE/10 || res<Integer.MIN_VALUE/10) return 0;
if (res==Integer.MAX_VALUE/10 && digit>7) return 0;
if (res==Integer.MIN_VALUE/10 && digit<-8) return 0;
res = res*10+digit;
}
return res;
}
}
时间复杂度:;空间复杂度:。