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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章