您的位置:首页 > 其它

LeetCode每日一题--整数反转

2020-03-15 18:22 471 查看

  【前言】坚持日更LeetCode刷题系列

   不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!


  【题目】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:
x = -x
flag = 1
list_x = []  #创立一个空列表,存储得到的数码
while 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 or 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 result<-2**31 or result>2**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

  • 点赞 2
  • 收藏
  • 分享
  • 文章举报
Mingw_ 发布了36 篇原创文章 · 获赞 64 · 访问量 2789 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: