Leetcode:(Python)Reverse Integer

許博淳
數據共筆
Published in
3 min readMay 7, 2023

題目連結: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

--

--