给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数0之外,这个整数不会以零开头。
思路:
首先判断各位加上1后是否大于9,若大于,则标记有进位,在计算高位时将进位加上,计算到结束后,对结果进位进行判断,若有进位,则还需要扩充一位最高位。
#!/user/bin/env python
# !-*-coding:utf-8 -*-
# !Time :2018/9/25 4:03 PM
# !Author : hyCong
# !@File : .py
###给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数0之外,这个整数不会以零开头。
def plusOne(digits):
length = len(digits)
p = 1 #需要加的数
j = length - 1 #工作指针
plus = 0 #是否进位
while j >= 0: #从个位开始循环
if (digits[j] + p + plus) >= 10: #判断每一位在加上进位(各位还要加上1)之后是否超过9,若超过,则标记有进位,在下一次计算时加上进位
plus = 1 #标记有进位
digits[j] = 0 #因为此题加的是1,因此进位后,此为只会为0
else: #若不超过,则计算完成,修改当前计算位,将进位置位0
digits[j] += p + plus
plus = 0
break
p = 0 #因为我们只需要在最后一位加上1,因此在想高位计算时,需要将p置为0
j -= 1
if plus == 1: #判断计算完后,是否最高位仍然存在进位,若存则,则需要给数组多加一位
re = [plus] + digits
return re
return digits
s = [8, 9, 9]
print(plusOne(s))