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; } };
沒有留言 :
張貼留言