题目
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
分析
这个问题可以归类为基础的数组操作问题。我们需要对数组中的每个元素进行逐位处理,模拟加法的过程。具体步骤如下:
1、从数组的最后一位开始,逐位向前处理。
2、如果当前位加一后的结果小于10,则直接返回结果数组。
3、如果当前位加一后的结果等于10,则将当前位设为0,并继续处理前一位。
4、如果所有位都处理完毕后仍有进位(即首位也变为0),则在数组最前面添加一个1。
下面是详细的实现步骤和代码示例:
实现步骤
初始化一个从数组最后一位开始的循环。
在循环中对当前位加一,并检查是否需要进位。
如果不需要进位,直接返回结果数组。
如果需要进位,将当前位设为0,并继续处理前一位。
如果所有位都处理完毕后仍有进位,则在数组最前面添加一个1。
代码示例
def plusOne(self, digits: List[int]) -> List[int]:
"""
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一
:params digits: List - 表示非负整数的数组
:return List - 加一后的数组
"""
n = len(digits)
for i in range(n-1, -1, -1):
if digits[i] < 9:
digits[i] += 1
return digits
digits[i] = 0
return [1] + digits
解释
初始化循环:从数组的最后一位开始,逐位向前处理。
处理当前位:对当前位加一,并检查是否需要进位。如果没有进位,直接返回结果数组。
处理进位:如果有进位,将当前位设为0,并继续处理前一位。
处理所有位:如果所有位都处理完毕后仍有进位,在数组最前面添加一个1。
知识点总结
数组的遍历和索引操作。
模拟加法的进位处理。
列表的插入操作。