Leetcode—整數反轉(Python3實現)

整數反轉

題目:

給出一個 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章