Leetcode-探索 | 加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 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 = 0 13 digits[array_len-1] += 1 14 if digits[array_len-1] > 9: 15 digits[array_len-1] -= 10 16 c = 1 17 for i in range(array_len-2, -1, -1): 18 digits[i] += c 19 if digits[i] > 9: 20 digits[i] -= 10 21 c = 1 22 else: 23 c = 0 24 if c == 1: 25 digits.append(1) 26 for i in range(0, array_len): 27 digits[i+1] = digits[i] 28 digits[0] = 1 29 30 return digits 31 else: 32 return [1]
模拟手算或者这种模拟思想也具有一定程度的启发性。