题目
Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
题意:一个正整数,它的每一位存放在一个整型数组里,array[0]存放整数的高位。给这个整数加1,返回的结果也放在一个数组里。
代码1
题目简单,需要注意的地方就一个,处理进位。没有什么思考,直接写程序。稍微测试了一下,提交。通过没问题,但是一看执行时间,很受挫折。
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
r = digits[:]
n = len(r)
one = 1
for i in range(n-1, -1, -1):
add = one + r[i]
one = add // 10
q = add % 10
r[i] = q
if one == 0:
break
if one == 1:
r1 = [1]
r1.extend(r)
return r1
else:
return r
代码2
考虑了一下,没必要复制列表,把 r = digits[:]改为 r = digits,执行时间有明显改善,但是还不够。
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
r = digits
n = len(digits)
one = 1
for i in range(n-1, -1, -1):
add = one + digits[i]
one = add // 10
q = add % 10
r[i] = q
if one == 0:
break
if one == 1:
r1 = [1]
r1.extend(r)
return r1
else:
return r
代码3
还有什么地方呢?再找,抱着试一试的态度,因为加1,进位最大为1,可以直接赋值,求余改为用减法。没想到真的有效果,又前进了一步。
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
r = digits
n = len(r)
one = 1
for i in range(n-1, -1, -1):
add = one + r[i]
if add >= 10 :
one = 1
r[i] = add - 10
else:
one = 0
r[i] = add
break
if one == 1:
r1 = [1]
r1.extend(r)
return r1
else:
return r
代码4
有想到一个地方,list的extend可能还有空间,试一试改成+号吧,哦,又进了一步。
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
r = digits
n = len(r)
one = 1
for i in range(n-1, -1, -1):
add = one + r[i]
if add >= 10 :
one = 1
r[i] = add - 10
else:
one = 0
r[i] = add
break
if one == 1:
return [1] + r
else:
return r
再找,再找,可实在想不出来还有什地方可以再改进了。我的最好时间是44ms,前面还有一个40ms和36ms,他们是怎么做到的呢?简单的题目要做好了也不容易!