题目:
- 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
- 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
- 你可以假设除了整数 0 之外,这个整数不会以零开头。
例如:
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
思路:
我们可以分为三种情况:
- 输入的数最后一位不是9: 直接最后一位加一,例:输入123;输出124,末尾直接加一!
- 输入的数最后一位是9(但数字不全是9): 从数组的右边向左遍历,遇到9就令该位为0,直到遇到的不为9,例:输入109;输出110,输入的数字中最左边的数字是9,这是令该位为0,再右移一位,不是9则加一,然后跳出循环,输出为:110
- 输入的数全是9:例:输入99,输出:100,和上面开始一样,从右边开始遍历,遇到9就将其变为0,这是数字变为00,我们再末尾加0,再令首位为1,变为100
详细代码:
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
lenlist = len(digits) # 定义数组的长度
while lenlist: # 循环遍历:
if digits[lenlist-1] == 9: #若数组的最后一位是9,则将其变为0 (情况2)
digits[lenlist-1] = 0
else: # 最后一位不是9
digits[lenlist-1] += 1 # 则最后一位加一,并跳出循环 (情况1、2)
break
lenlist -= 1
if digits[0] == 0: # 如果首位是0,则为情况3
digits.append(0) # 末尾加0,并令首位为1
digits[0] = 1
return digits