Leetcode解题笔记

#7_整数反转

2019-03-28  本文已影响0人  FiveZM

via https://leetcode-cn.com/problems/reverse-integer/solution/

示例
输入: 123
输出: 321

输入: -123
输出: -321

输入: 120
输出: 21

思路:
将int整数最后一位数逐一弹出来,再推入前一位数中,比如先定义一个rev,然后将整型x%10 弹出(pop)后得到的值,与rev乘以10再相加,即是将这个弹出来的值推入rev中

  int 最大值为 2147483647
  int 最小值为-2147483648
  INTMAX : int 中的最大值
  INTMIN : int 中的最小值
  溢出就 return 0
 
   伪代码逻辑:分为正数和负数
  先讨论 rev 是正数的情况
           temp = rev * 10 + pop  导致溢出,那么一定有 rev≥ INTMAX/10 。
    情况1  rev > INTMAX/10 , 那么 temp = rev * 10 + pop   一定会溢出。
    情况2  rev == INTMAX/10 , 那么只要 pop 大于 7 , temp = rev * 10 + pop 一定会溢出。超出int的范围

    当rev为负数时,
           temp = rev * 10 + pop 导致溢出, 那么一定有 rev≤INTMIN/10 .
    情况1  rev < INTMIN/10 , 那么 temp = rev * 10 + pop 一定会溢出 . 少了10 的数,加一个个位的pop肯定 会溢出,低于int的范围
    情况2  rev == INTMIN/10, 那么 pop 小于-8 ,temp = rev * 10 + pop 一定会溢出.低于int的范围
public class _007 {
    public static void main(String[] args) {
        System.out.println(myReverse(1534236469));
    }

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

猜你喜欢

热点阅读