题目描述:给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。该数字按照大小进行排列,最大的数在列表的最前面。
样例:给定 [1,2,3] 表示 123, 返回 [1,2,4].给定 [9,9,9] 表示 999, 返回 [1,0,0,0].
其实是两个链表求和的简单版(链表求和详见:点击打开链接)。简单表现在两个方面:
1. 是数组,不是链表。数组的操作比链表简单太多了(因为有天然的下标,同时,不存在“摘链”,“链接”这些繁琐的操作)
2. 只是加1,而不是两个数组相加
思路和链表求和是一样的了。用一个整型变量add1记录是否应该进位,每一位的处理:为这一位加add1的和,再对10取余。这个思路比链表求和简单太多,不仔细讲了,有不明白的地方,可以回看上边的链接。
给出代码:
class Solution:# @param {int[]} digits a number represented as an array of digits# @return {int[]} the resultdef plusOne(self, digits):result = []n = len(digits) - 1add1 = 1while n >= 0:temp = digits[n] + add1result.insert(0, temp % 10)add1 = temp / 10n -= 1if add1 == 1:result.insert(0, 1)return result# Write your code here
需要注意第13行,最后若add1不为0,还要向前进一位。