加一

本文共297字。
展开

方法1、考虑特殊情况,末尾是9

思路:

1、末尾无9,直接+1;
2、末尾多个9,找最前面不是9的数+1,之后的数置零;
3、数组全是9,返回一个新数组,首位=1,其余=0

时间复杂度:O(n)O(n),其中 nn 是数组 \textit{digits}digits 的长度。

空间复杂度:O(1)O(1)。返回值不计入空间复杂度。

执行用时:32 ms

注意:逆序遍历,反序遍历

1
2
3
4
5
6
7
8
9
10
11
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
# 考虑特殊情况
l = len(digits)
for i in range(l-1,-1,-1):
if digits[i]!=9:
digits[i]+=1
for j in range(i+1,l):
digits[j]=0
return digits
return [1]+[0]*l

方法2、余数(判断+1是否为0)

思路:判断最后一个数+1求余数是否为0

1、逆序遍历求余数,赋值给当前位置;如不全为0,直接返回结果;
2、如全为0,则返回多一位的新数组,首位=1,其余为0.

执行用时:36 ms

1
2
3
4
5
6
7
8
9
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
# 求余数
l = len(digits)
for i in range(l-1,-1,-1):
digits[i]=(digits[i]+1)%10
if digits[i]!=0:
return digits
return [1]+[0]*l