leetCode算法(7)整數反轉

推薦閱讀:

整數反轉

給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:

輸入: 123
輸出: 321

示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢出那麼就返回 0。

這個題目正常情況下,想要實現反轉其實很簡單,可以採用字符串反轉,也可以才用數學方式。但是題目中特別交待了,只能存儲32位,即int類型。由於字符串轉換的效率較低且使用較多庫函數,所以解題方案不考慮該方法,而是通過數學計算來解決。我們可以考慮將反轉後得到的數當成定義爲一個long類型接收,這樣只需再最後判斷該long類型的值是否等於int類型時的值。

class Solution {
      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;
  }
}

還有一種方法是直接定義int的最大最小值來判斷是否溢出。

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX / 10 || rev == INT_MAX / 10 && pop > INT_MAX - INT_MAX / 10) return 0;
            if (rev < INT_MIN / 10 || rev == INT_MIN / 10 && pop < INT_MIN - INT_MIN / 10) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}

當然,除了上面這些方法還有一種方法就是捕捉異常,使用try catch。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章