給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。
方法:彈出和推入數字 & 溢位前進行檢查
思路
我們可以一次構建反轉整數的一位數字。在這樣做的時候,我們可以預先檢查向原整數附加另一位數字是否會導致溢位。
演算法
反轉整數的方法可以與反轉字串進行模擬。
我們想重複「彈出」 *** 的最後一位數字,並將它「推入」到 rev\textrev 的後面。最後,rev\textrev 將與 *** 相反。
要在沒有輔助堆疊 / 陣列的幫助下 「彈出」 和 「推入」 數字,我們可以使用數學方法。
//pop operation:
pop = x % 10;
x /= 10;
//push operation:
temp = rev * 10 + pop;
rev = temp;
但是,這種方法很危險,因為當 temp=rev⋅10+pop\text = \text \cdot 10 + \texttemp=rev⋅10+pop 時會導致溢位。
幸運的是,事先檢查這個語句是否會導致溢位很容易。
為了便於解釋,我們假設 rev\textrev 是正數。
如果 temp=rev⋅10+poptemp = \text \cdot 10 + \texttemp=rev⋅10+pop 導致溢位,那麼一定有 rev≥intmax10\text \geq \fracrev≥10intmax。
如果 rev>intmax10\text > \fracrev>10intmax,那麼 temp=rev⋅10+poptemp = \text \cdot 10 + \texttemp=rev⋅10+pop 一定會溢位。
如果 rev==intmax10\text == \fracrev==10intmax,那麼只要 pop>7\text > 7pop>7,temp=rev⋅10+poptemp = \text \cdot 10 + \texttemp=rev⋅10+pop 就會溢位。
當 rev\textrev 為負時可以應用類似的邏輯。
class solution
return res;
}}
騰訊精選練習題9 反轉鍊錶
反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?方法一 通過記錄前乙個節點的值並通過指標不斷移動的方式 時間複雜度為o n 假設n是列表的長度,時間複雜度是o n 空間複雜度為o 1 defin...
騰訊精選練習題34 旋轉鍊錶
給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1 2 3 4 5 null,k 2輸出 4 5 1 2 3 null解釋 向右旋轉 1 步 5 1 2 3 4 null 向右旋轉 2 步 4 5 1 2 3 null示例 2 輸入 0 1 2 nul...
騰訊精選練習題31 最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。方法一 class solution l ...