給出一個 32 位的有符號整數,你須要將這個整數中每位上的數字進行反轉。html
輸入: 123
輸出: 321python
輸入: -123
輸出: -321函數
輸入: 120
輸出: 21code
注意:
假設咱們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [−2^31, 2^31 − 1]。請根據這個假設,若是反轉後整數溢出那麼就返回 0。htm
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字符串