Leetcode 7 整數反轉

2021-09-02 18:57:34 字數 3020 閱讀 2752

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

示例 1:

輸入: 123

輸出: 321

示例 2:

輸入: -123

輸出: -321

示例 3:

輸入: 120

輸出: 21

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

題目注意點,不能超出範圍 [−231, 231 − 1]。如果反轉後整數溢位那麼就返回 0。

首先利用字串函式str,將數字轉化為字串x2str,這樣通過len函式統計出數字的長度,如果長度大於32,既可直接返回0。然後建立空的雜湊表haxi,通過字串x2str的首字元判斷整數是正數還是負數,然後通過第乙個迴圈把字元x2str字元賦值到雜湊表中。通過第二個迴圈把雜湊表中倒序的元素取出並賦值給字串a(最後把該字串轉化為整數即可),最後需要對倒序的整數進行檢測,判斷是否出現的倒序後溢位的現象。

class solution:

def reverse(self, x):

""":type x: int

:rtype: int

"""x2str=str(x)

if len(x2str) <= 32:

haxi={}

a=''

if x2str[0] == '-':

haxi[0] = '-'

for i in range(1,len(x2str)):

haxi[i] = x2str[len(x2str) - i]

else:

for i in range(len(x2str)):

haxi[i]=x2str[len(x2str)-1 - i]

for i in haxi.values():

a=a+str(i)

if (int(a) >= -2**31) and (int(a) <= (2**31-1)):

return int(a)

else:

return 0

else:

return 0

python3耗時:76ms

以上演算法解釋:

1.intmax代表正數最大值:231-1,intmin代表負數最小值:-231。

2.x是正數:如果rev迭代使得rev*10 > intmax,即temp=rev 10 +pop不滿足等式,一定會溢位。由於2**31-1==2147483647,即如果rev10 == intmax=214748364時,而且末尾數字pop > 7 時,則一定會溢位。

3.x是負數:如果rev迭代使得rev*10 < intmin,即temp=rev 10 +pop不滿足等式,一定會溢位。由於-2**31==-2147483648,即如果rev10 == intmin=214748364時,而且末尾數字pop < -8 時,則一定會溢位。(**注意:**負數在c++求餘數只有依舊為負數,所以temp和rev都是負數,最後得到的也是負數,所以不用考慮負號)

官網c++實現:

class solution 

return rev;}};

c++耗時20ms

python3實現:

通過模仿c++之後,負數檢測出錯,所以在python3中加入判斷是否為負數的判斷,即可轉化為正數,和整數操作一樣,但最後返回值時加負號:

class solution:

def reverse(self,x):

rev=0

intmax=2**31-1

intmin=-2**31

if x>=0:

while(x != 0):

pop = x % 10

x = int(x / 10)

if( rev>int(intmax/10) or ( rev == int(intmax/10) and pop > 7) ):

return 0

if( rev < int(intmin/10) or ( rev == int(intmin/10) and pop < -8) ):

return 0

rev =rev*10 +pop

return rev

else:

x=-x

while (x != 0):

pop = x % 10

x = int(x / 10)

if (rev > int(intmax / 10) or (rev == int(intmax / 10) and pop > 7)):

return 0

if (rev < int(intmin / 10) or (rev == int(intmin / 10) and pop < -8)):

return 0

rev = rev * 10 + pop

return -rev

python3耗時:72ms

注意點:

1.字典運算:

在字典中迴圈:for i in haxi.values();

在字典中迴圈用:for i in haxi.keys();

獲取字典值:haxi1.get(鍵),或者haxi1[鍵]。

2.注意判斷邏輯:第乙個中的正數和負數判斷以及賦值都不同。

3.注意231,在python中應該是:2**31。

4.python中求餘數和除法:

除法為』 / ',結果是浮點型,所以需要加int轉化。求餘數用 『 % 』。

LeetCode7反轉整數

給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123輸出 321示例 2 輸入 123輸出 321示例 3 輸入 120輸出 21注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。以字串方式思考...

LeetCode 7 反轉整數

給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123輸出 321示例 2 輸入 123輸出 321示例 3 輸入 120輸出 21注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。很簡單,就是不...

leetcode 7反轉整數

隨機一題 給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返...