13 整數反轉-20200323
題目
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例
輸入: 123
輸出: 321
注意
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 。請根據這個假設,如果反轉後整數溢出那麼就返回 0。
注意事項
- 數字是否以0開頭。
- 注意超出範圍。
思路一
最基本的思路就是遞歸除,得到一位的數值,然後翻轉。
修改經歷:
1. 原來是輸出超過範圍就得到0啊。(第一次提交)
- 解答錯誤。
2. 修改過後成功。(第二次提交)
- 執行用時 :52 ms, 在所有 Python3 提交中擊敗了19.64%的用戶
- 內存消耗 :13.5 MB, 在所有 Python3 提交中擊敗了5.12%的用戶
心得體會:
這個算法,是很常用的算法。但是好像不太快。關於 map 和 reduce 函數的區別寫在知識點 5. Python 3 中的 map() 函數與 reduce() 函數 了。
最終代碼展示:
from functools import reduce
class Solution:
def reverse(self, x: int) -> int:
if -9 < x and x < 9:
return x
else:
get_single = lambda n, l: int((n - (int((n / pow(10, l+1))) * pow(10, l+1)))/pow(10,l))
get_final = lambda x, y: x*10 + y
L, K = 0, []
while pow(10,L) <= abs(x):
K.append(get_single(abs(x), L))
L += 1
final_num = reduce(get_final, K)
if x >= 0:
pass
else:
final_num *= -1
if final_num > pow(2,31) -1 or final_num < -pow(2, 31):
return 0
else:
return final_num
還有一種寫法很簡單,你細細品。
class Solution:
def reverse(self, x: int) -> int:
res, y =0, abs(x)
while y != 0:
res = res*10 + y%10
boundry = (1<<31) -1 if x>0 else 1<<31
if res > boundry:
return 0
else:
pass
y //= 10
return res if x > 0 else -res