7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
方案一:
考量点:int转字符串、切片、溢出
class Solution:
def reverse(self, x: int) -> int:
if -10 < x < 10:
y = x
elif x >= 10 :
y = int(str(x)[::-1])
else:
_tmp = int(str(x)[:0:-1])
y = -_tmp
# 考量结果是否溢出!!!
if -2**31 < y < 2**31-1:
return y
else:
return 0
![161b1a4426bb4ef54ce0a104b15ba7c5.png](https://i-blog.csdnimg.cn/blog_migrate/4699de8d5b4341bb671fc743ab08ccfa.jpeg)
方案二:
思路:把判断条件减少,单位数的判断条件不单独拎出来,0 -作为正数,-1 step来切片。然而执行耗时却加长了。
class Solution:
def reverse(self, x: int) -> int:
if x >= 0 :
y = int(str(x)[::-1])
else:
_tmp = int(str(x)[:0:-1])
y = -_tmp
if -2**31 < y < 2**31-1:
return y
else:
return 0
![23396f5b523cce5f1430786f0c63157a.png](https://i-blog.csdnimg.cn/blog_migrate/de9d1789a0fe755485a482b6e0001536.jpeg)
方案三:
考量点:反转数字(获取一位数:x%10)
重复“弹出” x 的最后一位数字,并将它“推入”到 res 的后面。最后,res 将与 x 相反
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:
res = res*10 + y%10
if res > boundry:
return 0
y = y // 10
return res if x >=0 else -res
![bb0722600537d2bc64b1fe53e065d3d5.png](https://i-blog.csdnimg.cn/blog_migrate/8624aae30be654d50dd4dadc5c39941b.jpeg)