leetcode第7題整數反轉

題目描述

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

示例1:

輸入: 123
輸出: 321python

示例2:

輸入: -123
輸出: -321函數

示例3:

輸入: 120
輸出: 21code

注意:
假設咱們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [−2^31, 2^31 − 1]。請根據這個假設,若是反轉後整數溢出那麼就返回 0。htm

解題思路(python)

2^31=2147483648
在看到這個題之後,最容易想到的辦法就是使用字符串反轉。可是須要進行各類狀況的判斷,好比大於0小於0;因爲python整型沒有規定範圍,還須要判斷2147483648。
yh師兄給我提供了另外一種思路,利用reduce函數進行迭代。我當時沒寫出來,師兄給了完整的代碼以後,我發現這種辦法很精巧。我把他的代碼也放到這裏,感謝他的幫助。教程

#思路一:字符串
class Solution:
    def reverse(self, x):
        """x:int"""
        if (x>2147483647 or x<-2147483648):
            return 0
        if -10 < x < 10:
            return x
        if x>0:           
            x = str(x)
            x = int(str(int(x[::-1])))
            if (x>2147483647 or x<-2147483648):
                return 0
            else:
                return x
        elif x<0:
            x = str(abs(x))
            x=-int(str(int(x[::-1])))
            if (x>2147483647 or x<-2147483648):
                return 0
            else:
                return x

執行用時84ms,內存消耗13.4MB內存

#思路二:reduce函數對字符串迭代處理
from functools import reduce
class Solution:
    def reverse(self, x):
        """x:int"""
        flag = False
        if x > 0:
            flag = True
        else:
            x = -x
        res = reduce(lambda a,b:b+a, [i for i in str(x)])
        res = int(res) if flag else -int(res)
        if res>2147483647 or res<-2147483648:
            return 0
        return res

執行用時88ms,內存消耗13.2MB字符串

reduce函數

Python reduce() 函數,菜鳥教程get

相關文章
相關標籤/搜索