题目解析
题目要求反转一个32位的有符号整数,即将整数的数字顺序倒过来。
思路分析
我们可以使用取模和除法的方式,逐位取出原整数的数字,然后拼接成新的整数。
整数的符号处理
由于题目要求反转有符号整数,我们需要注意处理正负号。我们可以先将整数转换成字符串,再进行处理。如果得到的反转后的字符串是负号开头的,我们可以将其截取掉,然后在转换回整数时乘以-1。
整数的取模和除法
我们可以使用取模和除法的方式来逐位取出原整数的数字,然后拼接成新的整数。我们可以先将整数转换成字符串,然后遍历字符串的每一个字符,每次取出最后一位,将字符转换成整数,然后拼接到新的整数上。为了避免整数溢出的问题,我们可以使用64位的整数进行拼接。
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
x = -x
sign = -1
else:
sign = 1
reversed_num = 0
while x != 0:
digit = x % 10
x //= 10
reversed_num = reversed_num * 10 + digit
if reversed_num * sign > 2**31 - 1 or reversed_num * sign < -2**31:
return 0
else:
return reversed_num * sign
时间复杂度分析
在解法中,我们需要遍历整数的每一位,所以时间复杂度为O(log_10(n)),其中n为整数的大小。
空间复杂度分析
在解法中,我们只需要使用常数级别的额外空间,所以空间复杂度为O(1)。
测试案例
案例一:
x = 123
预期输出:321
案例二:
x = -123
预期输出:-321
案例三:
x = 120
预期输出:21
案例四:
x = 0
预期输出:0
完整代码
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
x = -x
sign = -1
else:
sign = 1
reversed_num = 0
while x != 0:
digit = x % 10
x //= 10
reversed_num = reversed_num * 10 + digit
if reversed_num * sign > 2**31 - 1 or reversed_num * sign < -2**31:
return 0
else:
return reversed_num * sign
总结
本题要求反转整数,我们可以使用取模和除法的方式逐位取出数字进行拼接。需要注意处理整数的符号问题和整数溢出问题。时间复杂度为O(log_10(n)),空间复杂度为O(1)。