思路一
将数组中的数字str后连接起来,变为整数+1,再还原为list
一行代码
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
return [int(x) for x in str(int(''.join(str(x) for x in digits)) + 1)]
思路二
模拟加法的过程,自从最右开始,divmodh(a,b)函数返回两个值的商和余数,商可以用来判断是否需要进位,余数可以作为+1后当前位的值。遍历结束如果carry不为0,说明还需要再进一位,如999这样的数,+1后就是1000。
carry = 1
for i in range(len(digits)-1,-1,-1):
carry,b = divmod(digits[i] + carry,10)
digits[i] = b
if carry != 0:
digits.insert(0,1)
return digit
思路三
从右至左,判断是否小于9,小于9直接+1返回整体,等于9就置为0并进行下一位的判断。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
for i in range(len(digits)-1,-1,-1):
if digits[i] < 9:
digits[i] += 1 #小于9,不需要再进位,直接加1并return
return digits
else:
digits[i] = 0
return [1] + [0] *len(digits) #如果是999这样的数,经过上面的循环全部变成了000,则要在最前面加一个1并返回