2017年6月19日 星期一

7. Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

click to show spoilers.

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

Subscribe to see which companies asked this question.

解法 :
         本來以為這是一個非常簡單的題目,就先檢查進來的數字是不是有overflow然後再將它反轉,結果... 還是錯誤??

後來發現原因是這樣,假設你在做反轉的公式時。他的數字 * 10 就會超過 int的最大或是最小值的話,一樣會發生overflow的情況。

因此你必須將解答的變數用比 int 還要大的type來裝,像longlong,反轉完之後的解答要再次檢查是否是overflow

程式碼如下

class Solution {
public:
    int reverse(int x) {
        
        if (x > INT_MAX || x < INT_MIN)
        {
            return 0;
        }

        long long temp = 0;
        
        while (x != 0)
        {
            temp = (temp * 10) + x % 10;
            x /= 10;
        }

        if (temp > INT_MAX || temp < INT_MIN)
        {
            return 0;
        }           

        return temp; 
    }
};

沒有留言 :

張貼留言