題目連結:https://leetcode.com/problems/reverse-integer/description/
題意說明
- 給定一個數字,回傳反向數字
- 給定 456,回傳 654
- 給定-568,回傳 -865
初始想法
- 分離出正負
- 將數字轉為字串,反轉,再逐一結合
- 將正負和數字結合
實作程式碼
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
sign = '-'
else:
sign = '+'
x = str(abs(x))
number_string = ""
for n in x[::-1]:
number_string = number_string + n
if int(sign+number_string) < 2**31-1 and int(sign+number_string) > -2**31:
return int(sign+number_string)
else:
return 0
表現其差無比
反思一:不用使用迴圈反轉字串
其實不用使用迴圈,直接 x[::-1]就是反轉字串結果
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
sign = '-'
else:
sign = '+'
x = str(abs(x))
number_string = x[::-1]
if int(sign+number_string) < 2**31-1 and int(sign+number_string) > -2**31:
return int(sign+number_string)
else:
return 0
馬上快了5%
參考他人解法
比對上下界時,因為數字已經取絕對值,可以只比上界,然後再結合正負號
實作程式碼
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
sign = '-'
else:
sign = '+'
x = str(abs(x))
number_string = x[::-1]
if int(number_string) < 2**31-1:
return int(sign+number_string)
else:
return 0
表現明顯上升
最後增加可讀性
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
sign = '-'
else:
sign = '+'
number_string = str(abs(x))
number_string_reverse = number_string[::-1]
if int(number_string_reverse) < 2**31-1:
return int(sign+number_string_reverse)
else:
return 0