LeetCode笔记——7. 整数反转

7. 整数反转

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

示例 :
输入: 123
输出: 321

思路

通过 % 求余运算获取数字的最后一位,通过整数除法 /10 去掉最后一位,重复此操作直至数字变为 0,便可获取到数字的每一位。

class Solution {
    //反转
    public 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;
    }
}

注意:溢出判断

  • 如果 temp=rev * 10 + pop导致溢出,那么一定有 rev ≥ INTMAX/10。
  • 如果 rev > INTMAX/10​,那么 temp=rev * 10 + pop 一定会溢出。
  • 如果 rev==INTMAX/10,那么只要 pop > 7,temp=rev⋅10+pop 就会溢出,因为INTMAX个位为7。

改进:
1、使用Long类型来接收结果。
2、因为int类型最大数和最小数开头的数字只能是1或2,所以如果有最后一次循环的话,pop的值一定为1或2,所以(rev == Integer.MAX_VALUE / 10 && pop > 7)和 (rev == Integer.MIN_VALUE / 10 && pop < -8)判断可以省略。

你可能感兴趣的:(LeetCode笔记——7. 整数反转)