66.加一
描述:给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例1
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例2
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
我
l = digits[::]
i = len(digits)-1
while i >= 0:
if l[i]+1 <=9:
l[i]+=1
return l
else:
if i == 0:
l[i] = (l[i]+1)%10
l.insert(0,1)
return l
elif l[i]+1 > 9:
l[i]=(l[i]+1)%10
if l[i-1]+1 < 10:
l[i-1] = l[i-1]+1
return l
else:
i-=1
先不说我的代码,先看看别人的,如此干净利落!
if len(digits) == 0:
digits = [1]
elif digits[-1] == 9:
digits = self.plusOne(digits[:-1])
digits.extend([0])
else:
digits[-1] += 1
return digits
我的思想太粗暴了,题目中说最后一个数要加1.我就老老实实把最后一个元素加一来判断。分两种情况:
1)加1以后小于9。
2)加1以后大于9。但是这个情况又涉及两种情况:a.digits只有一个元素,所以在index=0插入1。b.相加以后产生进位,若将进位加到前面一位数仍产生进位怎么处理。
emmm…我jio得我对步骤的描述并不科学。
大神的就很简洁。题目中也有说digits里的数是1-9,所以只要判断最后一位数是不是9就好。如果是9的话,那个位置就更改为0.而不用向我的一样,再进行求余运算。emmm。。。我把问题的范围扩大了,我的程序可以求解1-18之间的数。这里就两种情况了:最后一位不是9;最后一位是9,那么相加以后会产生进位,就得再接着判断前一位是不是9.这里可以采用循环(像我一样)或者像大神一样(采用递归)。递归的话可以尝试单步调试,有助于理解过程。