Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31, 2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
今天这道题在我心中才能算是简单的,自己设计的逻辑虽然复杂,最起码思路很清晰。每一步知道该干啥。整体思路就是通过转化成字符来进行操作,最后再转化回去。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x>(pow(2,31)-1):
return 0
if x<pow(2,31)*(-1):
return 0
if x<0:
tostr = str(x)
tstr = tostr[1:]
else:
tstr = str(x)
res = ''
for i in range(len(tstr)):
res = res + tstr[len(tstr)-1-i]
if x<0:
res_int = int('-'+res)
if res_int<pow(2,31)*(-1):
return 0
else:
return res_int
else:
res_int = int(res)
if res_int>(pow(2,31)-1):
return 0
else:
return int(res)
代码虽然成功通过,但是又臭又长。
找到了当前提交的最好代码。学习一下。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
sign = 1 if x >= 0 else -1 #利用这种sign来判断正负
s = str(abs(x)) #利用绝对值,减少正负if的判断
ret = sign * int(s[::-1]) #s[::-1]直接输出倒序,简单明了。
if -2 ** 31 <= ret < 2 ** 31: #两个**比pow简单,这个范围判断应该直接两个在一起,分开的确很麻烦。。。徒增代码,没有意义。
return ret
return 0