1. 程式人生 > 其它 >leetcode-7:整數反轉

leetcode-7:整數反轉

技術標籤:演算法從零開始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也能通過一定的方式可以對超過儲存範圍的資料進行運算和儲存。