给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
https://leetcode.cn/problems/plus-one/description/?envType=study-plan-v2&envId=programming-skills
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0] 输出:[1]
思路:区分两种情况,非9加1则加1。9加1则变为0同时要进位。
注意特殊情况全为9时数组长度加一,第一位数字为1其余为0
一、递归解法,模拟进位
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
if len(digits)==digits.count(9):#排除输入全为9时的情况
digits=[1]+[0 for i in range(len(digits))]
return digits
digits[-1]+=1
def func3(digits,i):
if i==len(digits):
return digits
if digits[-i]==10:#由后至前进位
digits[-i-1]+=1
digits[-i]=0
return func3(digits,i+1)
func3(digits,1)
return digits
二、暴力解法
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
temp=0
for i in range(1,len(digits)+1):
temp+=digits[-i]*(10**(i-1))#把列表每个数字提取出来并放在相应的进制位上,转换成整型
temp+=1#执行+1操作,直接得到已经进位(若有的话)的和
l2=[]
while temp>0:#按位提取数字放进列表
l2.append(temp%10)
temp//=10
l2.reverse()#反转列表
return l2