LeetCode Easy: 66. Plus One
一、题目
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
给定一个字符串数组,加一之后返回字符串数组。如:[1,2,1] => [1,2,2] [9, 9] => [1,0,0]
二、解题思路
在整型数组的末元素进行加 1 操作,分两种情况:
1、无进位:直接加 1,然后返回
2、有进位,当前位置 0 ,前一位执行加 1操作
这里循环需要考虑的一点是,当遍历到第 0 位时,若有进位,最高位置 0,然后还有在前面增加一个 1,这里使用的是python中的 extend()方法,其和append()方法是有区别的。
list.append(object) 向列表中添加一个对象object
list.extend(sequence) 把一个序列seq的内容添加到列表中
详细见博客:https://www.cnblogs.com/subic/p/6553187.html
#coding:utf-8
import time
def plusOne1(digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
digits[-1] = digits[-1]+1
i = len(digits)-1
while i>=0:
if digits[i]==10:
if i == 0:
digits[i] = 0
D = [1]
D.extend(digits)
print(D)
return D
else:
digits[i] = 0
digits[i-1] = digits[i-1] + 1
i -= 1
print(digits)
return digits
def plusOne2(digits):
length = len(digits)
i = length - 1
while (i >= 0):
if i == 0:
if (digits[i] + 1) > 9:
digits[i] = 0
result = [1]
result.extend(digits)
print(result)
return result
if (digits[i] + 1) <= 9:
digits[i] += 1
print(digits)
return digits
else:
digits[i] = 0
i -= 1
print(digits)
return digits
if __name__ == '__main__':
s = [9,9]
starttime = time.clock()
plusOne1(s)
#plusOne2(s)
endtime = time.clock()
print((endtime-starttime)*100000)
最后提交的时候,我的代码(plusOne1)又超时间了,贴上了别人的代码(博客:https://blog.csdn.net/xiaolewennofollow/article/details/45226409),但是感觉并没有感觉哪里有区别,还请指教。
浙公网安备 33010602011771号