1. 程式人生 > >LeetCode之Reverse Integer(反轉整數 簡單 模擬)

LeetCode之Reverse Integer(反轉整數 簡單 模擬)

問題描述:

給定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;
    }
}