Leecode刷题日记7-反转整数【Java】

整数反转

1.题目描述

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

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

2.思路

反转数字,首先需要获得每一位上的数字,对10取模即可,然后倒过来拼成一个新的数字。由于不清楚数据的长度,开一个32位的数组来存储它的每一位数字,肯定是足够。题中还要求做反转后的数字的越界判断,可使用Integer里面的最大值和最小值常量数据进行判断。时间复杂度为O(n).

3.解法

     public int reverse(int x) {
        int[] resultArray = new int[32];
        int count = 0;
        long result = 0;
        while(true){
           resultArray[count] = x%10;
            count++;
            x = x/10;
            if(x==0)
                break;
       }
       count--;
       for(int i = 0;i <32;i++){
           if(resultArray[i]!=0)
                result +=resultArray[i]*Math.pow(10,count);
            count--;
       }
       if(result<Integer.MIN_VALUE||result>Integer.MAX_VALUE)return 0;
       return (int)result;
    }

网上更为简洁的做法,一次循环即可。一边整体移位,一边往后遍历。最妙的是,用强制转换后的(int)n做对比,比我用Integer的最大最小值要简洁的多了。

   public int reverse(int x) {
        long n = 0;
        while(x != 0) {
            n = n*10 + x%10;
            x = x/10;
        }
        return (int)n==n? (int)n:0;
    }

你可能感兴趣的:(leecode刷题)