这道题考察的最主要不是算法内容,flip输出实现起来很简单,问题在于如何有效判断溢出了[-2^31,2^31-1]的范围
最后没想出来看了官方题解和一些大神的帖子在这里po出来:
通过将2^31拆分 个位相乘得2^31-1个位是7
同理得到-2^31的个位是8
另一个技巧是从个位逐个取出原数字每一位的时候将其*10加在结果上得到逆序的数字
在这个过程中判断:
1.是否新的ans已经超过最大数字的n-1位 2.是否等于最大一位并且个位溢出
public static int reverse(int x){
int ans=0;
while(x!=0){
int pop = x%10;
if(ans>Integer.MAX_VALUE/10 ||(ans==Integer.MAX_VALUE/10 && pop>7)) {
return 0;
}
if(ans<Integer.MIN_VALUE/10 ||(ans==Integer.MIN_VALUE/10 && pop<-8)){
return 0;
}
ans = ans*10+pop;
x/=10;
}
return ans;
}