给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例

输入:x = -123  输出:-321

输入:x = 120  输出:21

解析

1)这道题如果没有不能超过32位存储空间的限制,就会很简单,用字符串翻转即可;

2)考虑到空间限制,就得从31位考虑,如果去掉各位数,大于 2**31//10,就要进一步判断各位数的大小。

代码示例

class Solution:
    def reverse(self, x: int) -> int:
        ans = 0
        x_ = abs(x)
        while x_ != 0:
            x_, m = divmod(x_, 10)
            if ans > 2**31//10:
                return 0
            if ans == 2**31//10 and x>0 and m>2**31%10-1:
                return 0
            if ans == 2**31//10 and x<0 and m>2**31%10:
                return 0
            ans = ans * 10 + m  # 实现翻转的主要逻辑
        return ans if x>0 else -ans

执行用时:32 ms, 在所有 Python3 提交中击败了 93.81% 的用户.

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/414