题目链接:Reverse Integer
思路:
因为Python中的数字是没有overflow的,即limit取决于电脑的内存。不过题目有额外要求,假设我们只能处理
32-bit signed 的数字区间。 所以需要另外加一个判断。另外,Python内置的int()函数可以把 “001” 转换成数字 1。
数字要注意区分正负。负数反转还是负数。对于Python来说,有两种解法:
- 可以把数字转换成字符串反转然后转换回数字
- 可以把反转的数字乘以10加上x % 10,x每次除以10直到0为止
算法复杂度:
Pythonic:
时间:O(x)
空间:O(n) where n is the length of x
一般方法:
时间:O(logx)
空间:O(n) where n is the length of x
代码:
Pythonic Approach
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x < 0:
minus_sign = str(x)[0]
abs_x = abs(x)
res = minus_sign + str(abs_x)[::-1]
if int(res) > 2**31-1 or int(res) < -2**31:
return 0
else:
return int(res)
else:
if int(str(x)[::-1]) > 2**31-1 or int(str(x)[::-1]) < -2**31:
return 0
else:
return int(str(x)[::-1])
一般方法
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
sign = 1 if x > 0 else -1
x = abs(x)
t = 0
while x:
t = t*10 + x % 10
x //= 10
t = t * sign
if t > 2**31-1 or t < -2**31:
return 0
else:
return t