Skip to content

Commit 17abe95

Browse files
author
lishulong
committed
addTwoNumbers 164 ms
1 parent 1df3e0a commit 17abe95

File tree

1 file changed

+121
-6
lines changed

1 file changed

+121
-6
lines changed

python3/2.Add Two Numbers(两数相加).py

Lines changed: 121 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,131 @@
3434

3535

3636
# Definition for singly-linked list.
37-
# class ListNode:
38-
# def __init__(self, x):
39-
# self.val = x
40-
# self.next = None
37+
class ListNode:
38+
def __init__(self, x):
39+
self.val = x
40+
self.next = None
41+
4142

4243
class Solution:
43-
def addTwoNumbers(self, l1, l2):
44+
def addTwoNumbers(self, l1: ListNode, l2: ListNode):
45+
"""
46+
:type l1: ListNode
47+
:type l2: ListNode
48+
:rtype: ListNode
49+
"""
50+
if not l1 or not l2:
51+
raise Exception('l1 or l2 is None!')
52+
sum1 = sum2 = 0
53+
k = 0
54+
while l1 or l2:
55+
k += 1
56+
if l1:
57+
sum1 += l1.val * 10 ** k
58+
l1 = l1.next
59+
60+
if l2:
61+
sum2 += l2.val * 10 ** k
62+
l2 = l2.next
63+
64+
# 获取逆序的数字字符
65+
# sum_str = str(sum1 + sum2)
66+
strs = str(sum1 + sum2)[::-1]
67+
# 判断溢位
68+
bit = max([len(str(sum1)), len(str(sum2))])
69+
l = len(strs) - bit
70+
if l >= 0 and strs.startswith('0') and len(strs) > 1:
71+
strs = strs[1:]
72+
# 相差三位
73+
sum_str = str(int(strs)) if len(strs) > 3 and l >= 2 else strs
74+
# sum_str = str(int(str(sum1 + sum2)[::-1]))
75+
# 创建listNode
76+
tmp = ListNode(0)
77+
for i in sum_str:
78+
self.appendNext(tmp, int(i))
79+
80+
res = tmp.next
81+
return res
82+
83+
def appendNext(self, res, content):
84+
if res.next is None:
85+
res.next = ListNode(content)
86+
else:
87+
self.appendNext(res.next, content)
88+
89+
def addTwoNumbers1(self, l1, l2):
4490
"""
4591
:type l1: ListNode
4692
:type l2: ListNode
4793
:rtype: ListNode
4894
"""
49-
95+
if l1 is None:
96+
return l2
97+
if l2 is None:
98+
return l1
99+
100+
tmp = ListNode(0)
101+
res = tmp
102+
flag = 0
103+
while l1 or l2:
104+
tmpsum = 0
105+
if l1:
106+
tmpsum = l1.val
107+
l1 = l1.next
108+
if l2:
109+
tmpsum += l2.val
110+
l2 = l2.next
111+
tmpres = ((tmpsum + flag) % 10)
112+
flag = ((tmpsum + flag) // 10)
113+
res.next = ListNode(tmpres)
114+
res = res.next
115+
if flag:
116+
res.next = ListNode(1)
117+
res = tmp.next
118+
del tmp
119+
return res
120+
121+
122+
def pro(l1, l2):
123+
a = Solution().addTwoNumbers(l1, l2)
124+
print('==============')
125+
while a is not None:
126+
print(a.val)
127+
a = a.next
128+
129+
130+
if __name__ == '__main__':
131+
# 899
132+
# 0 0
133+
l1 = ListNode(0)
134+
l2 = ListNode(1)
135+
pro(l1, l2)
136+
print('+++++++++++++++')
137+
138+
#
139+
l1 = ListNode(0)
140+
l2 = ListNode(0)
141+
pro(l1, l2)
142+
print('+++++++++++++++')
143+
144+
l1 = ListNode(8)
145+
l2 = ListNode(2)
146+
Solution().appendNext(l1, 9)
147+
Solution().appendNext(l1, 9)
148+
pro(l1, l2)
149+
print('+++++++++++++++')
150+
151+
#
152+
l1 = ListNode(5)
153+
l2 = ListNode(5)
154+
pro(l1, l2)
155+
print('+++++++++++++++')
156+
157+
l1 = ListNode(2)
158+
l2 = ListNode(5)
159+
Solution().appendNext(l1, 4)
160+
Solution().appendNext(l1, 3)
161+
Solution().appendNext(l2, 6)
162+
Solution().appendNext(l2, 4)
163+
pro(l1, l2)
164+
print('+++++++++++++++')

0 commit comments

Comments
 (0)