66.加一
题目描述
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [9,9]
输出: [1,0,0]
解释: 输入数组表示数字 99。
这个题我用两个方法来解:
- 使用列表转字符串转数字,相加后再转字符串转列表
- 直接加到列表最后元素,再判断是否需要进位
解题思路一
- 将数组列表转字符串
- 将字符串转数字然后加1
- 再把数字转回列表
class Solution:
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
digits_str = [str(i) for i in digits]
num_str = "".join(digits_str)
num = int (num_str)
num = num + 1
num_str = str (num)
digits_new = [int(i) for i in num_str]
return digits_new
提交后发现代码效率不高。
109 / 109 个通过测试用例
执行用时:56 ms
执行用时战胜30.64%的用户
解题思路二
- 判断最后一位是否是9,如果不是,最后一位直接加1
- 判断是否全是9,如查全是9,就把9置0,数组最前插入1
- 如果不是上面两种情况,就从后往前找9置0,把第一个不是9的加1。
class Solution:
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
if digits[-1] < 9 :
digits [-1] += 1
return digits
else:
mark = True
for i in digits:
if i < 9:
mark = False
if mark:
digits=[0]*len(digits)
digits.insert(0,1)
return digits
else:
for i in range(len(digits)):
if digits[(0-i-1)] == 9:
digits[(0-i-1)]=0
else:
digits[(0-i-1)] += 1
return digits
这个方法效率还可以。
109 / 109 个通过测试用例
执行用时:44 ms
执行用时战胜 99.73%的用户