LeetCode7. 整数反转

LeetCode7. 整数反转

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ,就返回 0。

思路分析

  1. 使用整数除法和取模的思路
  2. 整数每次模10,则得到这个整数的最低位,每次除以10,则去掉这个整数的最低位
  3. 因此可以循环的判断,循环结束的条件为 不为0,
  4. 每次循环将 上一次运算的结果 * 10 再加上拿到的最低位
  5. 题目要求反转后整数不超过32位有符号整数的范围,因此要加以判断

源码及分析

public int reverse(int x) {
        //记录返回值
        int res = 0;
        while (x != 0){
            //判断是否越界
            //@Native public static final int   MIN_VALUE = 0x80000000;
            // 十进制数 -2147483648
            //@Native public static final int   MAX_VALUE = 0x7fffffff;
            //十进制数  2147483647

            //因此可以使用两个字段表示32位有符号整数的范围
            if (res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10){
                return 0;
            }
            //取模拿到最低位
            int digit = x % 10;
            //将每次拿到的最低位反转拼接
            res = res * 10 + digit;
            //除法去掉最低位
            x = x / 10;
        }
        //返回
        return res;
    }
posted @ 2021-05-05 10:00  mx_info  阅读(58)  评论(0)    收藏  举报