【LeetCode07】

95 阅读1分钟

这道题考察的最主要不是算法内容,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;

}