[LeetCode] 7. Reverse Integer

Problem: Reverse digits of an integer.

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

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

為了通過所有的測試案例,而寫出以下的版本,簡直體現了測試驅動開發(Test-driven development)。

要分離出每一位數(digit),可以透過除以 10 取餘數的方式,如圖一左側,接著逐次乘以 10 加上取出的一位數變成倒序排列,如圖一右側。

圖一

原本我以為這樣的算法在輸入負數的情境時會出錯,殊不知是多此一舉,在看到其他人的做法後,我才發現這個演算法也適用於負數,如圖二試算:

圖二

於是,修改後的程式碼變得簡潔許多,

處理溢位問題也有多種方法,我是用 int 儲存反轉後的數字,判斷它接下來如果乘以 10 是否會溢位。另一種方法是用更大空間(例如:long)儲存反轉後的數字,計算時就不會發生溢位,再去判斷是否超出 Integer 的範圍,也許是更為直觀的寫法。