题目
给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
解题:
方法一:双指针
自己实现的一个方式,按照题目要求逐个实现
class Solution: def reverse(self, x: int) -> int: #去掉末尾的0 if x == 0 : return 0 while x%10 == 0 : x = int(x/10) #反转整数 num = list(str(x)) left = 0 if num[0]!="-" else 1 right = len(num)-1 while left<right: num[left],num[right] = num[right],num[left] left+=1 right-=1 x = int("".join(num)) #判断结果是否符合范围 if x>=-2**31 and x<=2**31-1: return x else: return 0
方法二:弹出和推入数字
class Solution: def reverse(self, x: int) -> int: y,res = abs(x),0 boundry = (1<<31)-1 if x>0 else 1<<31 while y!=0: pop = y%10 y = y//10 res = res*10+pop if res>boundry: return 0 return res if x>0 else -res
方法三:对方法二扩展,利用int->str->list进行反转
class Solution: def reverse(self, x: int) -> int: y,res = abs(x),0 boundry = (1<<31)-1 if x>0 else 1<<31 res = int("".join(list(str(y))[::-1])) if res>boundry: return 0 return res if x>0 else -res
总结:
实际上python是弱类型语言,在python环境中不会出现超出存储范围报错的情况,就算超过64位整型的范围,python也能通过一定的方式可以对超过存储范围的数据进行运算和存储。