7. 整數反轉 - LeetCode
阿新 • • 發佈:2021-01-20
7. 整數反轉
直接呼叫Java內建API
class Solution { public int reverse(int x) { int coefficient = 1; if(x < 0){ coefficient = -1; x *= -1; } int ans = 0; try{ ans = Integer.parseInt(new StringBuilder().append(x).reverse().toString()); } catch(NumberFormatException e){ ans = 0; } finally{ return coefficient * ans; } } }
這裡有幾點需要注意:
- 存在負數的情況,若使用字串反轉,則無法處理負號,因此需要提前將係數提出。
- 存在反轉後超過int範圍的情況,因此需要捕獲異常後,設定為0。
這樣寫法比較簡單,但是大材小用,速度有點慢,可以換成自己的反轉寫法。
自己反轉
class Solution { public int reverse(int x) { int ans = 0; while (x != 0) { int y = x % 10; x /= 10; if (ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE / 10 && y > 7)){ return 0; } if (ans < Integer.MIN_VALUE/10 || (ans == Integer.MIN_VALUE / 10 &&y < -8)){ return 0; } ans = ans * 10 + y; } return ans; } }
自己反轉的難點在判斷是否溢位。題中要求-231<=x<=231-1,即是有符號整數int的範圍,可以與Integer.MAX_VALUE和Integer.MIN_VALUE進行比較。但是溢位就不好比了,所以需要在溢位之前判斷下一步是否可能溢位。因為我們是一位一位往上加,所以只需看到231的個位數是8,那麼對於正數來說,當前數字與Integer.MAX_VALUE/10比較,如果相同再比較個位數,負數也類似。