LeetCode之Reverse Integer(反轉整數 簡單 模擬)
阿新 • • 發佈:2018-12-14
問題描述:
給定32位有符號整數,整數的反向數字。
例1:
輸入: 123
輸出: 321
例2:
輸入: -123
輸出: -321
例3:
輸入: 120
輸出: 21
注意:
假設我們正在處理一個只能在32位有符號整數範圍內儲存整數的環境:[ - 2^31 2^31 - 1]。出於此問題的目的,假設當反向整數溢位時,函式返回0。
首先想到一個邏輯 ,用取餘方式取得最後一位數pop,然後用res儲存最後結果res = res * 10 + pop. 想到這裡其次就是在獲得執行這步之前判斷結果是否溢位,
假設整數是正數,
如果res = res *10 + pop 導致Integer溢位,那麼一定是 res>=Integer.MAX_VALUE;
(1)res>Integer.MAX_VALUE,一定溢位返回0
(2)res=Integer.MIN_VALUE,因為整數能存的最大整數是2147483647 所以判斷下pop>7 會導致溢位。
反之, 負數同理。
程式碼實現
public int reverse(int x) { int res = 0; while(x!=0){ int pop = x%10; x=x/10; if(res>Integer.MAX_VALUE/10||(res==Integer.MAX_VALUE/10&&pop>7)){return 0;} if(res<Integer.MIN_VALUE/10||(res==Integer.MIN_VALUE/10&&pop<-8)){return 0;} res = res*10+pop; } return res; }
接下來附一個更好的解決方案,用long來儲存給定整數 只要在最後判斷一次是否溢位整數就行。
public class Solution { public int reverse(int x) { long answer = 0; while(x != 0) { answer = 10 * answer + x % 10; x /= 10; } return (answer > Integer.MAX_VALUE || answer < Integer.MIN_VALUE) ? 0 : (int) answer; } }