【前言】坚持日更LeetCode刷题系列
不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!
【题目】66.加一
题目描述:给定一个由整数
组成的非空
数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个
数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
你可以假设数组中无重复元素。
示例:
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
示例 3:
输入: [9]
输出: [1,0]
解释:输入数组表示数字9
思路一:
很容易我们可用想到暴力求解的方法,即将列表中的数字转化为原来的数字后加一,再求出结果后的每位数码,并逆序输出即可。具体代码如下:
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
sum1 = 0
for i in range(len(digits)):
sum1 = sum1*10+digits[i]
sum1 = sum1+1
list2 = []
while sum1>0:
list2.append(sum1%10)
sum1 = sum1//10
return list2[::-1]
运行结果:
思路二:
采用递归的思想(操作上采用循环遍历的方式),从末尾数开始判断(digits[i]+1 % 10)如果为0,则上一位产生进位,继续进行相同的判断,直到判断不为0。注意当数字为99,999类型时,需要在列表增加一个新元素1。具体代码如下:
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
for i in range(len(digits)-1,-1,-1):
digits[i] = digits[i]+1 #可以想下为什么把digits[i]+1放在此处
if(digits[i]%10==0):
digits[i] = 0
else:
return digits
if(digits[0]==0): #如果首位为0,则证明该数字为99,999类型,因此需要在首位插入一个1
digits.insert(0,1)
return digits
运行结果:
关于其中一些知识的链接:
列表的insert函数
算法图解
思路三:
利用python中int类型和str类型互化求解。具体代码(参考自LeeCode评论区某前辈)如下:
class Solution:
def plusOne(self, digits):
'''
:type digits: List[int]
:rtype :List[int]
'''
d = int(''.join([str(i) for i in digits]))+1
return [int(i) for i in str(d) ]
运行结果:
分享就到这里了,欢迎大家一起交流讨论。
注明
:
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one