Reverse Integer

这题本身没什么地方很难,唯一需要注意的就是大数问题,即超过32bit位的数应该如何处理,一般语言对此题可能都需要除10处理,Python的话直接转字符列表反转再利用join就可以反过来了,下面是自己的代码

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        sign = 1 if x >= 0 else -1
        lst = list(str(x))
        if lst[0] in ['-', '+']:
            del lst[0]

        lst.reverse()
        result = int(''.join(lst)) * sign
        return result if abs(result) < 2 ** 31 - 1 else 0

其实并不需要转换成string,也不需要额外空间去存储,这种做法比较符合题目的精神

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if not x:
            return 0
        result = 0
        sign = x / abs(x)
        x = abs(x)

        while x:
            x, digit = divmod(x, 10)
            result = 10 * result + digit

        if -2 ** 31 < result * sign < 2 ** 31 - 1:
            return result * sign
        return 0

另外还有利用Python神语法的简短版,其中的backquote是相当于把quote内的字符当做数值运算完成后得到的结果自动转回字符串变量,向女装大佬低头_(:зゝ∠)_

def reverse(self, x):
    s = cmp(x, 0)
    r = int(`s*x`[::-1])
    return s*r * (r < 2**31)

results matching ""

    No results matching ""