题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例
输入:x = 123
输出:321
输入:x = -123
输出:-321
解法
如果不考虑 “假设环境不允许存储 64 位整数(有符号或无符号)”这个条件,可以直接转化成字符串反转。
考虑到这个条件,在验证大小后再推入新的数字。可以一直验证到倒数第二位,倒数第一位不用验证,因为如果还能往进推入数字的话,最大也是2,<7.
class Solution:
def reverse(self, x: int) -> int:
dight=0
INT_MAX=2**31-1
INT_MIN=-2**31
ans=0
while x!=0:
dight=x%10
#这里因为整除会向下取整,所以加一
if ans<INT_MIN//10+1 or ans>INT_MAX//10:
return 0
else:
if x<0 and dight>0: #这里还要排除dight=0的情况
dight-=10 #python负数取模会出现是正数的情况
x=(x-dight)//10 #不直接整除10,因为负数整除会向更小的负数取整
ans=ans*10+dight
return ans