007._Reverse_Integer.md 1.7 KB
Newer Older
K
KEQI HUANG 已提交
1
### 7. Reverse Integer
K
KEQI HUANG 已提交
2 3 4 5 6 7 8 9 10 11 12 13

题目:
<https://leetcode.com/problems/Reverse-Integer/>


难度:

Easy


思路

K
KEQI HUANG 已提交
14 15 16
翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。

#### 解法1:
K
KEQI HUANG 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
如果输入的是负数,就递归调用原函数,参数变成-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
```
K
KEQI HUANG 已提交
35 36
#### 解法2:
按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果
K
KEQI HUANG 已提交
37 38
```python
class Solution(object):
K
KEQI HUANG 已提交
39
    def reverse(self, x):
K
KEQI HUANG 已提交
40 41 42
        """
        :type x: int
        :rtype: int
K
KEQI HUANG 已提交
43
        """    
K
KEQI HUANG 已提交
44 45
        x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1])   # [:-1]相当于把负号去掉
        x = 0 if abs(x) > 0x7FFFFFFF else x
K
KEQI HUANG 已提交
46 47
        return x
```
K
KEQI HUANG 已提交
48
#### 解法3(StefanPochmann大神):
K
KEQI HUANG 已提交
49
看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions)
K
KEQI HUANG 已提交
50 51 52


cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧!
K
KEQI HUANG 已提交
53 54
```python
class Solution(object):
K
KEQI HUANG 已提交
55
    def reverse(self, x):
K
KEQI HUANG 已提交
56 57 58 59 60 61 62 63 64 65
        """
        :type x: int
        :rtype: int
        """
        s = cmp(x, 0)
        r = int(`s * x`[::-1])
        return s * r * (r < 2 ** 31)
```