# 轉載請註明出處 http://blog.csdn.net/qq_34175893/article/details/79636790
# 打算開始用python學習算法,並進行一系列的學習過程及心得體會的記錄,歡迎大家持續關注,一起學習。歡迎大家提出意見或建議
# 不關心問題的解決,只關心不同的解決的問題的思路,所有的思路均在代碼中註釋,大家邊看代碼邊看思路,
# _*_ coding:utf-8 _*_
'''
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
'''
# 在閱讀下面的註釋的時候請注意:這裏我一開始犯了一個錯誤,混淆了list和ListNode類型,
# 所以我認爲可行的方案solution0均是基於list的,Solution1之後的纔是是基於ListNode的
class Solution0(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
len1 = len2 = 0
'''
下面註釋是一些求長度的方法,所有方法在IDE中均可通過,但是一到LeetCode就跪了,MMP
求長度1
len1=len(l1)
len2=len(l2)
如果是在自己的IDE裏面,直接使用len()就行了,但是要提交到LeetCode上還是乖乖自己求len吧
'''
'''
求長度2
len1=len2=0
for l in l1:
len1+=1
for l in l2:
len2+=1
這TM也不行???
TypeError: 'ListNode' object is not iterable
'''
if len1>=len2:
for i in range(0,len2):
l1[i]+=l2[i]
if l1[i]>=10:
l1[i]%=10
l1[i+1]+=1
return l1
else:
for i in range(0,len1):
l2[i]+=l1[i]
if l2[i]>10:
l2[i]%=10
l2[i+1]+=1
return l1
'''
# mmp在LeetCode 的ListNode類裏面沒有len()方法,其ListNode類定義如下
class ListNode:
def init(self, x):
self.val = x
self.next = None
'''
# 講真的,這個時間真的不能太在意,
# 同樣一份代碼,前後兩次運時間差異在60ms波動,第一次運行了200ms,結果排名還不到10%
# 需要注意的就是ListNode在IDE中會報錯
# 146ms 53.42%
class Solution1(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
dummy, flag = ListNode(0), 0
head = dummy
while flag or l1 or l2:
node = ListNode(flag)
if l1:
node.val += l1.val
l1 = l1.next
if l2:
node.val += l2.val
l2 = l2.next
flag = node.val / 10
node.val %= 10
head.next = node
head = head.next # head.next, head = node, node
return dummy.next
# 140ms 72.39%
class Solution2(object):
def addTwoNumbers(self,l1,l2):
if not l1: return l2
if not l2: return l1
dummy = ListNode(0)
p = dummy
flag = 0
while l1 and l2:
tmp = l1.val + l2.val + flag
p.next = ListNode(tmp % 10)
flag = tmp / 10
l1, l2, p = l1.next, l2.next, p.next
if l1:
while l1:
tmp = l1.val + flag
p.next = ListNode(tmp % 10)
flag = tmp / 10
l1, p = l1.next, p.next
if l2:
while l2:
tmp = l2.val + flag
p.next = ListNode(tmp % 10)
flag = tmp / 10
l2, p = l2.next, p.next
if flag == 1: p.next = ListNode(flag)
return dummy.next
本題參考http://www.cnblogs.com/lupx/p/leetcode-2.html