一、题设
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0] 输出:[1]
二、基本思路
设置进位标志符tag=0,逐个按位相加,每次的位相加结果sum大于等于10,则当前位存入(sum-10),tag = 1即可;当sum小于等于10时,当前位存入sum,tag = 0 即可。
第一位特别拉出来处理一下:当出循环后tag为1,则代表有进位,则需要额外加一位1进去,若tag = 0 ,不用处理。
三、代码实现
def plusOne(self, digits):
tag = 0
n = len(digits)
digits[n-1] += 1
for i in range(n-1,-1,-1):
if digits[i] + tag >= 10:
digits[i] = digits[i] + tag - 10
tag = 1
else:
digits[i] = digits[i] + tag
tag = 0
if tag == 1:
digits = [1] + digits
return digits
四、效率总结