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: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。
如果输入的是负数,就递归调用原函数,参数变成-x即可
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x < 0:
return -self.reverse(-x)
res = 0
while x:
res = res * 10 + x % 10
x /= 10
return res if res <= 0x7fffffff else 0
思路2:
按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) # [:-1]相当于把负号去掉
x = 0 if abs(x) > 0x7FFFFFFF else x
return x
思路3:
1.记录符号
2.将数字当字符串处理
3.判断是否阈值区间,进行比较就行
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
mark = 1 if x>=0 else -1
x_abs = abs(x)
result = mark * int(str(x_abs)[::-1])
return result if -2**31 <= result <= 2**31-1 else 0