题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
要求:最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
分析:
本题的关键是“进位”,如果最后一个数字加一是小于10 的数字,则只需要将数组的最后一个元素加一即可。关键是面对进位如何处理?
例如:99,如何转为100?
方法一:
通过将数组中的数字转换为具体意义中的数字后,作加一的运算,再将得到后的数字转换为数组的形式。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
sums = 0
# 首先计算得出数组中存储的数字本身
for i in range(len(digits)):
sums += 10**(len(digits)-1-i)*digits[i]
# 将数字转换为字符串
sums_str = str(sums + 1)
# 将字符串再次转换为列表
return [int(j) for j in sums_str]
方法二:
直接在数组中进行加一的操作。首先按照从尾到头的顺序判断是否等于九,再分别做相应的处理。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
# 从尾到头遍历
for i in range(len(digits)-1, -1, -1):
# 判断如果不等于9,返回加一后的数字
if digits[i] != 9:
digits[i] += 1
return digits
# 如果等于九,令这一位置元素为0,继续判断上一个元素的值
digits[i] = 0
# 如果上方元素都等于9,令第一个元素为1,并且在元组后面再加一个0.
digits[0] = 1
digits.append(0)
return digits
结论:本题的关键是处理临界点数字9,两种方法分别在数字和列表的角度进行处理。