方法一:转化为字符串
将x转化为字符串,直接反转
class Solution:
def reverse(self, x: int) -> int:
str_x = str(x)
if str_x[0] == '-':
reverse_x = str_x[:0:-1]
reverse_num = int('-' + reverse_x)
else:
reverse_x = str_x[::-1]
reverse_num = int(reverse_x)
if reverse_num < (-2)**31 or reverse_num > 2**31 - 1:
return 0
else:
return reverse_num
方法二:求出各位数字后反转
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
negative = True
x = -x
else:
negative = False
# 求该数有几位
n = 1
while(x // 10**n != 0):
n += 1
# 存放各位数字的列表
x_list = []
for i in range(n-1, -1, -1):
num = x // 10**i
x_list.append(num)
x -= num * 10**i
x_reverse = 0
for i in range(n):
x_reverse += x_list[i] * 10**i
if negative:
x_reverse = -x_reverse
if x_reverse < (-2)**31 or x_reverse > 2**31 - 1:
return 0
else:
return x_reverse
方法三:末位弹出
class Solution:
def reverse(self, x: int) -> int:
rev = 0
if x < 0:
negative = True
x = -x
else:
negative = False
while(x > 0):
pop = x % 10
rev = rev * 10 + pop
x = x // 10
if negative:
rev = -rev
if rev < (-2)**31 or rev > 2**31 - 1:
return 0
else:
return rev
复杂度分析
- 时间复杂度: O ( log ( x ) ) O(\log(x)) O(log(x)), x x x 中大约有 log 10 ( x ) \log_{10}(x) log10(x)位数字。
- 空间复杂度: O ( 1 ) O(1) O(1)