479 words
2 minutes
LeetCode-66 加一

LeetCode-66 加一#

题目#

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2: 输入: [4,9,9,9]
输出: [5,0,0,0]
解释: 输入数组表示数字 5000。

解法一#

思路#

将数组中的每一个字符连接成一个字符串; 然后字符串转换为整数,再将数字增加1; 分割数字,组成另一个数组

代码#

class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
num = ""
for i in digits:
num += str(i)
num = str(int(num) + 1)
ans = []
for i in num:
ans.append(int(i))
return ans

复杂度#

空间:O(n) 时间:O(n)

解法二#

思路#

和第一种思路类似 遍历数组,将数组变成数字形式 新数字加一 分割数字,组成另一个数组

代码#

class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
intNum = 0
for i in range(len(digits)):
intNum = intNum*10 + digits[i]
intNum += 1
res = []
for i in str(intNum):
res.append(int(i))
return res

复杂度#

空间:O(n) 时间:O(n)

解法三#

思路#

换个思路,加一无非两个情况

  • 末位为 9 需要进位
  • 末位不为 9,直接加一
  1. 首先设边界条件,若无数字则为一
  2. 末位为 9:
  • 截取除最后一位外的数组,末位加一
  • 新数组结尾填零
  1. 末位不为 9: 末位直接加一

代码#

class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
if len(digits) == 0:
digits = [1]
elif digits[-1] == 9:
digits = self.plusOne(digits[:-1])
digits.extend([0])
else:
digits[-1] += 1
return digits

为了好理解些,解释下代码 digits = self.plusOne(digits[:-1]) 示例:

digits = [9, 0, 9]
# digits = [9, 0, 9]
digits = self.plusOne([9, 0]) # this returns [9, 1]
# digits = [9, 1]
digits.extend([0])
# digits = [9, 1, 0]

复杂度#

时间:O(n) 空间:O(1)

LeetCode-66 加一
https://evanyuki.github.io/posts/3d1b156ab8ef46629863bc019e29160b/
Author
Evanyuki
Published at
2022-09-13
License
CC BY-NC-SA 4.0