给你一个 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