WLOP | 北漠
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,直接加一
- 首先设边界条件,若无数字则为一
- 末位为 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)