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),但是感觉并没有感觉哪里有区别,还请指教。