力扣加一
要求
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
思路1
1.将digit的数组转为字符串
2.然后再将字符串转为 int 加1
3.再将字符串转为数组就完毕了
代码片
s="".join(str(x) for x in digits)
int1=int(s)
s1=int1+1
s2=str(s1)
s=[]
for i in range(len(s2)):
s.append(int(s2[i]))
return s
# t=[int(s2[i]) for i in range(len(s2))] //这里的代码是可以的,只是效率不如上面的
# return t
思路二
思路一的升级版,代码更加精简效率更高
class Solution:
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
r=''
for i in digits:
r+=str(i)
num=str(int(r)+1)
d=[]
for j in range(len(num)):
d.append(int(num[j]))
return d
思路三
1.判断最后一位的数字是否小于9,小于9,就直接再最后一位加1,然后把这个数组拼接起来就行了
2.如果最后一位不小于9的(就是9了)然后循环倒数n-2 到-1的位置(n=len(nums))又去判断是否大于9,不大于直接就是 把前面的数组再拼接一个[0]就可以了,如果大于9那就把后面再拼接一个[0] 数组(现在就2个0 了即[0,0])
例如 [1,9,9] 现在不满足条件1 所以申明一个数组res=[0] 和然后for循环前面的 判断前一个是不是 也是大于9 大于9 然后 res=[0,0]了 再循环一次 发现就到了位置0 digits[0]=1 ,发现 返回结果为digits[:i]+[digits[i]+1] + res 即为[] +[2]+[0,0]
class Solution:
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
n = len(digits)
if digits[-1] < 9:
return digits[:-1] + [digits[-1]+1]
res = [0]
for i in range(n-2,-1,-1):
if digits[i] < 9:
return digits[:i]+[digits[i]+1] + res
else:
res.append(0)
if digits[0] == 9:
return [1] + res
else:
return res