EX:
Input: 123 Output: 321
想法:
這題乍看很簡單,但其實有些小細節要特別注意,首先因為 32-bit signed integer range: -2147483648~2147483647,所以需要注意 overflow 的情況,例如翻轉 2147483647 翻轉後變成 7463847412 就溢位了,而判斷是否 overflow 我們可以檢查
翻轉到目前的位數是否 > 214748364 (INT_MAX / 10),因為若是大於 214748364 則下一位是多少都會 overflow,而為啥不用考慮
剛好等於 214748364 的情況呢? 因為输入的x也是一个整數,所以x的范圍也在 -2147483648~2147483647 之間,
那摸 x 的第一位只能是1或者2,翻轉之后 res 的最後一位只能是1或2,所以 res 只能是
2147483641 或 2147483642 都在 int 的范圍内。但是它們對應的x為 1463847412 和
2463847412,後者overflow。所以當 res 等於 214748364 時, x只可能是 1463847412,
翻轉後的结果為 2147483641,在整數的範圍內,所以不用考慮等於的情況。
完整程式碼:
class Solution {
public:
int reverse(int x) {
int res = 0;
while (x != 0) {
// overflow
if (abs(res) > INT_MAX / 10) { return 0; }
res = res*10 + x % 10;
x = x / 10;
}
return res;
}
};
沒有留言:
張貼留言