LeetCode Ex07 Reverse Integer

Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:
Input: 123
Output: 321

Example 2:
Input: -123
Output: -321

Example 3:
Input: 120
Output: 21

题目

该题要求翻转一个32位数字,主要要考虑的是精度问题防止溢出
我们用pop来获取数字的最后一位,并将其不断"push"入rev中,但是 temp=rev10+pop可能会导致溢出,所以需要我们去检查是否溢出
我们假设rev是正数,如果temp=rev
10+pop会造成溢出,那么rev肯定>Integer.max/10。
如果 rev>Integer.max/10,那么 temp=rev10+pop一定会溢出。
如果 rev==Integer.max/10,那么 temp=rev
10+pop溢出当且仅当 pop>7
若rev是负数,同样可行

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

猜你喜欢

转载自blog.csdn.net/weixin_33795806/article/details/87156232
今日推荐