leetcode-7:整數反轉
阿新 • • 發佈:2021-01-28
技術標籤:演算法從零開始pythonpython演算法leetcode
LC 整數反轉
題目
題目連結
給你一個 32 位的有符號整數 x ,返回 x 中每位上的數字反轉後的結果。
如果反轉後整數超過 32 位的有符號整數的範圍 [−231, 231 − 1]
,就返回 0。
假設環境不允許儲存 64 位整數(有符號或無符號)。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
解題:
方法一:雙指標
自己實現的一個方式,按照題目要求逐個實現
class Solution:
def reverse(self, x: int) -> int:
#去掉末尾的0
if x == 0 :
return 0
while x%10 == 0 :
x = int(x/10)
#反轉整數
num = list(str(x))
left = 0 if num[0]!="-" else 1
right = len(num)-1
while left<right:
num[left],num[right] = num[right],num[left]
left+=1
right-=1
x = int("".join(num))
#判斷結果是否符合範圍
if x>=-2**31 and x<=2**31-1:
return x
else :
return 0
方法二:彈出和推入數字
class Solution:
def reverse(self, x: int) -> int:
y,res = abs(x),0
boundry = (1<<31)-1 if x>0 else 1<<31
while y!=0:
pop = y%10
y = y//10
res = res*10+pop
if res>boundry:
return 0
return res if x>0 else -res
方法三:對方法二擴充套件,利用int->str->list進行反轉
class Solution:
def reverse(self, x: int) -> int:
y,res = abs(x),0
boundry = (1<<31)-1 if x>0 else 1<<31
res = int("".join(list(str(y))[::-1]))
if res>boundry:
return 0
return res if x>0 else -res
總結:
實際上python是弱型別語言,在python環境中不會出現超出儲存範圍報錯的情況,就算超過64位整型的範圍,python也能通過一定的方式可以對超過儲存範圍的資料進行運算和儲存。