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]

模拟手算或者这种模拟思想也具有一定程度的启发性。

猜你喜欢

转载自www.cnblogs.com/qinziang/p/9201839.html