【前言】坚持日更LeeCode刷题系列
不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!
【题目】7.整数反转
题目描述:给出一个 32 位的有符号整数
,你需要将这个整数中每位上的数字进行反转。
示例:
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]
。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路一:通过将整数通过模10取余的方法得到每一个数码,并将其存入列表中,由于第一个数字不能为0,用if语句进行判断,如果为0,则删除该数字,此过程应该定义在while循环体内,要保证第一个数码不能为0。代码如下:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x == 0: #0为特殊情况,需要单独考虑
return 0
else:
flag = 0 #用于标志该数字的正负
if x 0: #通过%10取余的方法得到数码
i = x%10
list_x.append(i)
x = x // 10
while list_x[0] == 0 and len(list_x)>1:
#判断第一个数码是否为0,且当只有一个数码,即只有一个数码时,不再进行此过程
del list_x[0] #如果第0个数码为0,则在列表中删除该数码
num = 0
for i in range(len(list_x)): #将所有的数码,还原为整数
num = num*10+list_x[i]
if flag == 1:
num = -num
if num 2**31-1: #判断是否溢出
return 0
return num
运行结果:
思路二:将整数x转化为str类型,并通过lstrip,rstrip的方式,去除掉左端的‘-’和右端的0,再通过列表内的reversed函数对其进行逆序操作。代码如下:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x = str(x) #将x转化为str类型
flag =0 #判断x的正负
result = 0 #存储结果
if x[0] =='-':
flag=1
num = []
num = list(reversed(x.rstrip('0').lstrip('-'))) #对右边去除0,左边去除‘-’的str(x)进行逆序操作
for i in range(len(num)):
result = int(num[i])+result*10
if flag==1:
result=-result
if result2**31-1:
return 0
else:
return result
运行结果:
Notice:
当我们将列表中的数字还原为整数类型时,对于类似于‘0123’的值,会自动转化成123而不是0123,因此对x的rstrip()操作是不必要的。(大家可以自行试验)
关于其中一些知识的链接:
Python strip、lstrip、rstrip函数讲解
Python reversed & reverse函数
分享就到这里了,欢迎大家一起交流讨论。
注明:
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer