Reverse Integer
这题本身没什么地方很难,唯一需要注意的就是大数问题,即超过32bit位的数应该如何处理,一般语言对此题可能都需要除10处理,Python的话直接转字符列表反转再利用join就可以反过来了,下面是自己的代码
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
sign = 1 if x >= 0 else -1
lst = list(str(x))
if lst[0] in ['-', '+']:
del lst[0]
lst.reverse()
result = int(''.join(lst)) * sign
return result if abs(result) < 2 ** 31 - 1 else 0
其实并不需要转换成string,也不需要额外空间去存储,这种做法比较符合题目的精神
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if not x:
return 0
result = 0
sign = x / abs(x)
x = abs(x)
while x:
x, digit = divmod(x, 10)
result = 10 * result + digit
if -2 ** 31 < result * sign < 2 ** 31 - 1:
return result * sign
return 0
另外还有利用Python神语法的简短版,其中的backquote是相当于把quote内的字符当做数值运算完成后得到的结果自动转回字符串变量,向女装大佬低头_(:зゝ∠)_
def reverse(self, x):
s = cmp(x, 0)
r = int(`s*x`[::-1])
return s*r * (r < 2**31)