给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。
——————————————————————————————————————————————
这题很自然想到模拟手算,注意进位和一些值的合法状态范围等,如在编写下面的AC代码时就出现了list.append之后之前的arry_len失效而未察觉的情况。
1 class Solution(object): 2 def plusOne(self, digits): 3 """ 4 :type digits: List[int] 5 :rtype: List[int] 6 """ 7 8 # calculate by hand 9 array_len = len(digits)10 11 if array_len > 0:12 c = 013 digits[array_len-1] += 114 if digits[array_len-1] > 9:15 digits[array_len-1] -= 1016 c = 117 for i in range(array_len-2, -1, -1):18 digits[i] += c19 if digits[i] > 9:20 digits[i] -= 1021 c = 122 else:23 c = 024 if c == 1:25 digits.append(1)26 for i in range(0, array_len):27 digits[i+1] = digits[i]28 digits[0] = 129 30 return digits31 else:32 return [1]
模拟手算或者这种模拟思想也具有一定程度的启发性。