7. 反轉整數(LeetCode 題解)

題目描述:

給定一個 32 位有符號整數,將整數中的數字進行反轉。

示例 1:

輸入:123

輸出:321

示例 2:

輸入:-123

輸出:-321

示例 3:

輸入:120

輸出:21

注意:

假設我們的環境只能存儲 32 位有符號整數,其數值範圍是 [−2^31, 2^31 − 1]。根據這個假設,如果反轉後的整數溢出,則返回 0。

彈出和推入數字 & 溢出前進行檢查:

思路

我們可以一次構建反轉整數的一位數字。在這樣做的時候,我們可以預先檢查向原整數附加另一位數字是否會導致溢出。

算法

反轉整數的方法可以與反轉字符串進行類比。

我們想重複 “彈出” x 的最後一位數字,並將它 “推入” 到 rev 的後面。最後,rev 將與 x 相反。

要在沒有輔助堆棧 / 數組的幫助下 “彈出” 和 “推入” 數字,我們可以使用數學方法。

7. 反轉整數(LeetCode 題解)

但是,這種方法很危險,因為當 temp = rev ⋅ 10 + pop 時會導致溢出。

幸運的是,事先檢查這個語句是否會導致溢出很容易。

為了便於解釋,我們假設 rev 是正數。

7. 反轉整數(LeetCode 題解)

當 rev 為負時可以應用類似的邏輯。

C++ 代碼實現

7. 反轉整數(LeetCode 題解)

Java 代碼實現

7. 反轉整數(LeetCode 題解)

複雜度分析

  • 時間複雜度:O(log(x)),x 中大約有 log10(x) 位數字。
  • 空間複雜度:O(1)。


分享到:


相關文章: