Stefan Pochmann 的上帝之手(7)

7. 整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解法1 Pop and Push Digits & Check before Overflow (10行)

def reverse(self, x: int) -> int:
    rev, INT_MAX = 0, 2 ** 31 - 1
    sig = -1 if x < 0 else 1
    x = sig * x
    while x:
        pop = x % 10
        x //= 10
        if (rev > INT_MAX // 10) or (rev == INT_MAX // 10 and pop > 7):
            return 0
        rev = rev * 10 + pop
    return sig * rev 

上帝之手(3行)

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

说明:``表示将数字转换为str类型,Python3后改为repr()函数;cmp函数比较两个参数的大小,如果第一个参数大于第二个返回1,否则返回-1,Python3不再支持该函数,可以改为(a-b)-(b-a)

你可能感兴趣的:(Stefan Pochmann 的上帝之手(7))