### 7. Reverse Integer 题目: 难度: Easy 思路 翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 #### 解法1: 如果输入的是负数,就递归调用原函数,参数变成-x即可 ```python 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还是反转结果 ```python 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(StefanPochmann大神): 看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! ```python class Solution(object): def reverse(self, x): """ :type x: int :rtype: int """ s = cmp(x, 0) r = int(`s * x`[::-1]) return s * r * (r < 2 ** 31) ```