leetcode7-整数反转

原题

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

示例1:

输入: 123
输出: 321

示例2:

输入: -123
输出: -321

示例3:

输入: 120
输出: 21

注意:

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

解法

思想

每次用%10取余就能获得原数字最后一位的数字,关键是怎么判断在运算过程中是否溢出。

代码

class Solution {
    public int reverse(int x) {
        int ans = 0;
        boolean isNeg = false;
        if(x == Integer.MIN_VALUE) return 0;
        if(x < 0){
            isNeg = true;
            x = -x;
        }
        while(x!=0){
            if(ans>Integer.MAX_VALUE/10) return 0;
            ans = ans*10+ x%10;
            x = x/10;
        }
        if(isNeg) ans = -ans;

        return ans; 
    }
}

然后有看到另一种很巧妙的判断溢出的方法:

class Solution {
    public int reverse(int x) {
        int ans = 0;
        while (x != 0) {
            if ((ans * 10) / 10 != ans) {
                ans = 0;
                break;
            }
            ans = ans * 10 + x % 10;
            x = x / 10;
        }
        return ans;
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode7-%e6%95%b4%e6%95%b0%e5%8f%8d%e8%bd%ac/

发表回复

登录后才能评论