整數反轉
題目:
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [−2^31, 2^31− 1]。請根據這個假設,如果反轉後整數溢出那麼就返回 0。
題解:
1.符號位處理(將溢出範圍分爲兩部分[-2^31,0)和(0,2^31-1])
2.字符反轉並處理首位‘0’
3.溢出判斷並處理
網友的代碼(執行用時:80ms,內存消耗:13MB):
def reverse(x):
try:
#溢出判斷
if -2**31 <= x < 0:
x = str(x)[1:]
#去除第一位的‘0’
x = x[::-1].lstrip('0')
if int(x) > 2**31:
#如果反轉後溢出,則返回0
return 0
else:
return int('-' + x)
elif x == 0:
return 0
elif x < 2**31:
x = str(x)[::-1].lstrip('0')
if int(x) >= 2**31:
return 0
else:
return int(x)
except:
#處理輸入值過大溢出的問題
return 0
自己的代碼(執行時間:52ms,內存消耗:13.2MB):
class Solution:
def reverse(self, x: int) -> int:
if x<0:
x=abs(x)
x = list(str(x))
result = "".join(x[::-1])
if int(result)<2**31:
return int('-'+result)
else:
return 0
elif x>0:
x = list(str(x))
result = "".join(x[::-1])
if int(result)<2**31-1:
return int(result)
else:
return 0
elif x==0:
return 0