#7_整数反转

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

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

示例
输入: 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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。