leetcode——7.整数反转

题目解析

题目要求反转一个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)。

后端开发标签