騰訊精選練習題30 整數反轉

2021-09-18 17:41:28 字數 1493 閱讀 1708

給出乙個 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 ...