LeetCode-66 加一
3d1b156ab8ef46629863bc019e29160b
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,直接加一
- 首先设边界条件,若无数字则为一
- 末位为 9:
- 截取除最后一位外的数组,末位加一
- 新数组结尾填零
- 末位不为 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)
- 题目
- 解法一
- 思路
- 代码
- 复杂度
- 解法二
- 思路
- 代码
- 复杂度
- 解法三
- 思路
- 代码
- 复杂度