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

Posted Axiangcoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣(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;
    }
}

 

以上是关于力扣(LeetCode)整数反转 个人题解的主要内容,如果未能解决你的问题,请参考以下文章

力扣(LeetCode)加一 个人题解

力扣(LeetCode)颠倒二进制位 个人题解

力扣(LeetCode)删除排序链表中的重复元素 个人题解

力扣(LeetCode)平方数之和 个人题解

力扣(LeetCode)位1的个数 个人题解

力扣(LeetCode)两数相加 个人题解