题目链接Reverse Integer

思路
因为Python中的数字是没有overflow的,即limit取决于电脑的内存。不过题目有额外要求,假设我们只能处理
32-bit signed 的数字区间。 所以需要另外加一个判断。另外,Python内置的int()函数可以把 "001" 转换成数字 1。

数字要注意区分正负。负数反转还是负数。对于Python来说,有两种解法:

  • 可以把数字转换成字符串反转然后转换回数字
  • 可以把反转的数字乘以10加上x % 10,x每次除以10直到0为止

算法复杂度
Pythonic:

时间:O(x)
空间:O(n) where n is the length of x

一般方法:

时间:O(logx) 
空间:O(n) where n is the length of x

代码

Pythonic Approach

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x < 0:
            minus_sign = str(x)[0]
            abs_x = abs(x)
            res = minus_sign + str(abs_x)[::-1]
            if int(res) > 2**31-1 or int(res) < -2**31:
                return 0
            else:
                return int(res)
        else:
            if int(str(x)[::-1]) > 2**31-1 or int(str(x)[::-1]) < -2**31:
                return 0
            else:
                return int(str(x)[::-1])

一般方法

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        sign = 1 if x > 0 else -1
        x = abs(x)
        t = 0
        while x:
            t = t*10 + x % 10
            x  //= 10
        t = t * sign
        if t > 2**31-1 or t < -2**31:
            return 0
        else:
            return t



xuhang57
17 声望0 粉丝