LeetCode笔记——7反转整数

题目:给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

思路:这道题的思路不难。对输入参数先对10求余数再除以10依次取出各个位置上的数,再计算出最后反转的结果。同时要注意本题需要防止溢出,因此需要加一个溢出的判断。在以下的代码里,一开始为了防止溢出,将int的参数转换为long型的参数

代码:

class Solution {
    public int reverse(int x) {
        long tem=x;     //为了防止最后结果溢出
        long result=0;
        while(tem!=0)
        {
            result=result*10+tem%10;
            tem=tem/10;
        }
        //对是否溢出进行判断
        if(resultInteger.MAX_VALUE)
        {
            result= 0;
        }
        //数据类型转换
        return (int)result;
        
    }
}

执行最快的代码开始并没有将int转换为long,取数 的代码和之前的一样,只不过不同于之前代码计算出最后反转数的结果再进行溢出判断,该代码将判断放在了循环内,每计算出result就对它进行溢出判断。

执行最快的用例:

class Solution {
    public int reverse(int x) {
        int next = x;
        /*
         pop:反转数——余数
          */
        int pop = 0;
        int result = 0;
        do {
            pop = next % 10;
            next /= 10;
            // 判断是否溢出

            // MIN: -2147483648
            if (result < Integer.MIN_VALUE / 10 || result * 10 == Integer.MAX_VALUE && pop < -8) {
                return 0;
            }
            // MAX:  2147483647
            if (result > Integer.MAX_VALUE /10 || result * 10 == Integer.MAX_VALUE && pop > 7) {
                return 0;
            }
            result = result * 10 + pop;
        }
        while (next != 0);
        return result;
    }
}

你可能感兴趣的:(LeetCode笔记)