力扣(LeetCode)整数反转 个人题解

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

 

官方题解的思路是逐位取出,判断是否满足溢出的条件,并列举了可能出现的俩种情况,遇到直接返回0 。总得来说还是考察对数字的敏感。

代码如下:

class Solution {
    public int reverse(int x) {
        int ans=0;
        while(x!=0)
        {
            int tmp=x%10;
            x/=10;
            if (ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE / 10 && tmp > 7))
                return 0;
            if (ans < Integer.MIN_VALUE/10 || (ans == Integer.MIN_VALUE / 10 && tmp < -8))                     
                 return 0;
            ans=ans*10+tmp;
        }
        return ans;
    }
}            

 

个人的思路是将满足10位数的数字逐位比较MAX_VALUE或者MIN_VALUE对应位置,如果不满足直接返回0 。但是这里负数的没写好,所以就不放出来了。

看了大佬的操作,大佬直接判断反转后的数字再反转回去是否和原来对应,如果不对应,说明出现了溢出,返回0,如果对应,说明没溢出是正常的,继续操作。可以说是非常神仙的做法了。

代码如下:

class Solution {
    //反转后再反转看是否溢出
    public int reverse(int x) {
        int res = 0;
        while (x != 0){
            int tail = x % 10;
            int tmp = res * 10 + tail;
            if((tmp - tail) / 10 != res)return 0;
            res = tmp;
            x = x / 10;
        }
        return res;
    }
}

 

posted @ 2019-02-18 00:25  AXiangCoding  阅读(649)  评论(0编辑  收藏  举报