Easy LeetCode 7 整數反轉

2021-10-04 04:16:19 字數 1845 閱讀 3041

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

示例 1:

輸入: 123

輸出: 321

示例 2:

輸入: -123

輸出: -321

示例 3:

輸入: 120

輸出: 21

注意:假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−2^31, 2^31 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

分析: 反轉很簡單,res = res * 10 + x % 10; x /= 10;對此式子不斷迭代就可以實現反轉。難點在於如何判斷反轉後整數res*10+x%10是否溢位。

思路一:

為了便於解釋,我們假設 rev

\text

rev 是正數。

如果 tem

p=

rev⋅10+

poptem

p=re

v⋅10+

pop導

致溢位,

那麼一定

有rev≥i

ntma

x10

temp = \text \cdot 10 + \texttemp=rev⋅10+pop 導致溢位,那麼一定有 \text \geq \frac

temp

=rev⋅1

0+poptem

p=re

v⋅10

+pop

導致溢位

,那麼一

定有rev≥10

intm

ax​如果 rev

>in

tmax

10\text > \frac

rev>10

intm

ax​, 那麼 tem

p=

rev⋅10+

poptemp = \text \cdot 10 + \text

temp

=rev⋅1

0+pop一定會溢位。

如果 rev==

intm

ax

10\text == \frac

rev==1

0int

max​

, 那麼只要 pop

>

7\text > 7

pop>7,tem

p=

rev⋅10+

poptemp = \text \cdot 10 + \text

temp

=rev⋅1

0+pop就會溢位。

當 rev

\text

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

注: 7或8是因為最大值2的31次方是2147483648,最小值負2的31次方減一是-2147483647,這兩個數值的個位數是7和8.

int

reverse

(int x)

return rev;

}

優化

由思路1可知, int型別最大數和最小數開頭的數字只能是1或2,所以如果有最後一次迴圈的話,pop的值一定為1或2,所以(rev == int_max / 10 && pop > 7)和(rev == int_min / 10 && pop < -8)判斷可以省略。

並且integer.max_value/10 應該提取出來變數快取,不然while每次都得重新計算。即

int

reverse

(int x)

return rev;

}

7 整數反轉

鏈結 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321示例2 輸入 123 輸出 321示例 3 輸入 120 輸出 21注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後...

7 整數反轉

解法一 對輸入數字進行整除和取餘運算,並把輸出值乘以10後與每次取餘的結果相加,直到原資料變為0 每次迴圈,原數對10取餘 結果乘以10,同時原數對10整除。c int reverse int x return rev python def reverse self,x r 0 返回值 flag 1...

7 整數反轉

有些讀者反映我寫的內容太簡單,有時候看不懂思路,我以後會記得寫好思路。一 數值法 1.取出符號位 2.10一次取出x的每一位,再 10變為ans 3.判斷是否超出 output 0if x 0 flag 1else flag 1 x abs x while x 0 res x 10 x int x ...