法一:用原数除10取余的方法;
注意:python属于向下取余,即 5 / 2 = 2,而 (-5) / 2 = -3。因此,需要先将原数取绝对值再计算。
class Solution:
def reverse(self, x: int) -> int:
x_abs = abs(x)
num = 0
err = (2 ** 31) - 1 if x > 0 else 2 ** 31 # 等于 err = (1 << 31) - 1 if x > 0 else 1 << 31
while x_abs != 0:
num = num *10 + x_abs % 10
if num > err:
return 0
x_abs //= 10 # 要用地板除法
return num if x > 0 else -num
法二:反转字符串法:
将原数符号位取出,剩余部分转为字符串,反转字符串,然后再转为整数,乘以符号位输出。
1)直接对字符串元素进行反转:
class Solution:
def reverse(self, x: int) -> int:
x_abs = abs(x)
sign = 1 if x >= 0 else -1
x_str = str(x_abs)
x_str_reverse = x_str[::-1]
x_out = int(x_str_reverse) * sign
if -2 **31 <= x_out <= 2 ** 31 - 1:
return x_out
else:
return 0
2)借助列表进行反转(速度反而比直接反转快):
class Solution:
def reverse(self, x: int) -> int:
x_abs = abs(x)
sign = 1 if x >= 0 else -1
x_str = str(x_abs)
x_list = list(x_str)
x_list.reverse()
x_str_reverse = "".join(x_list)
x_out = int(x_str_reverse) * sign
if -2 **31 <= x_out <= 2 ** 31 - 1:
return x_out
else:
return 0