一開始沒在意給的是自定義的數據結構鏈表,直接用list去做了,開始的代碼如下:
def addTwoNumbers(l1, l2):
# 計算l1和l2的長度
len1 = len(l1)
len2 = len(l2)
# 計算l1的值
l1_value = 0
for i in range(len1):
index = len1 - i - 1
num_mul = index
num_data = l1[index]
while num_mul!=0:
num_data = num_data * 10
num_mul = num_mul - 1
l1_value = l1_value + num_data
# 計算l2的值
l2_value = 0
for i in range(len2):
index = len2 - i - 1
num_mul = index
num_data = l2[index]
while num_mul!=0:
num_data = num_data * 10
num_mul = num_mul - 1
l2_value = l2_value + num_data
# 得到反向的加和結果
sum_value = l1_value + l2_value
y = list()
while sum_value != 0:
y.append(sum_value % 10)
sum_value = int(sum_value/10)
return y
a = list()
a.append(2)
a.append(4)
a.append(3)
b = list()
b.append(5)
b.append(6)
b.append(4)
print(addTwoNumbers(a,b))
然後發現,要使用它給的自定義的list,然後修改了代碼,將自定義的轉化爲python自帶的,信心滿滿去提交,結果血崩:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def addTwoNumbers(l1, l2):
# 將自定義的結構轉化爲python自帶的list
k1 = list()
k2 = list()
while l1!=None:
k1.append(l1.val)
l1 = l1.next
while l2!=None:
k2.append(l2.val)
l2 = l2.next
# 計算l1和l2的長度
len1 = len(k1)
len2 = len(k2)
# 計算l1的值
l1_value = 0
for i in range(len1):
index = len1 - i - 1
num_mul = index
num_data = k1[index]
while num_mul!=0:
num_data = num_data * 10
num_mul = num_mul - 1
l1_value = l1_value + num_data
# 計算l2的值
l2_value = 0
for i in range(len2):
index = len2 - i - 1
num_mul = index
num_data = k2[index]
while num_mul!=0:
num_data = num_data * 10
num_mul = num_mul - 1
l2_value = l2_value + num_data
# 得到反向的加和結果
sum_value = l1_value + l2_value
y = ListNode(0)
x = y
while sum_value != 0:
y.val = sum_value % 10
sum_value = int(sum_value / 10)
if sum_value!=0:
y.next = ListNode(0)
y = y.next
return x
額,給了很大的數,估計就崩在這裏了;
簡單想了想,查了一下,python3沒有長整型,完犢子,不能用兩個數相加來做了,必須重構代碼了,血崩!!!
先去打個球吃個飯,哈哈哈
回來了,好吧,一個字符一個字符相加判斷吧,哭哭...
做出來了,中間出了一堆bug
最終成功代碼:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def addTwoNumbers(l1, l2):
y = ListNode(0)
x = y
add_one = 0
# 當兩個都不爲空時
while l1 != None and l2 != None:
print('111')
if l1.val + l2.val >= 10:
y.next = ListNode(0)
y = y.next
y.val = ((l1.val + l2.val) % 10 + add_one)
add_one = 1
l1 = l1.next
l2 = l2.next
else:
y.next = ListNode(0)
y = y.next
if l1.val + l2.val + add_one >= 10:
y.val = (l1.val + l2.val + add_one) % 10
add_one = 1
else:
y.val = (l1.val + l2.val + add_one)
add_one = 0
l1 = l1.next
l2 = l2.next
if l1 == None and l2 != None:
print('222')
while l2 != None:
y.next = ListNode(0)
y = y.next
if l2.val + add_one >= 10:
y.val = (l2.val + add_one) % 10
add_one = 1
else:
y.val = (l2.val + add_one)
add_one = 0
l2 = l2.next
if l2 == None and l1 != None:
print('333')
while l1 != None:
y.next = ListNode(0)
y = y.next
if l1.val + add_one >= 10:
y.val = (l1.val + add_one) % 10
add_one = 1
else:
y.val = (l1.val + add_one)
add_one = 0
l1 = l1.next
if l1 == None and l2 == None:
if add_one == 1:
print('444')
y.next = ListNode(1)
y = y.next
y.val = 1
return x.next
return x.next
l1 = ListNode(1)
l1.next = ListNode(0)
l1.next.next = ListNode(0)
l1.next.next.next = ListNode(0)
l1.next.next.next.next = ListNode(0)
l1.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next.next.next.next.next.next = ListNode(0)
l1.next.next.next.next.next.next.next.next.next.next.next.next.next.next = ListNode(0)
p = l1.next.next.next.next.next.next.next.next.next.next.next.next.next.next
p.next = ListNode(0)
p.next.next = ListNode(0)
p.next.next.next = ListNode(0)
p.next.next.next.next = ListNode(0)
p.next.next.next.next.next = ListNode(0)
p.next.next.next.next.next.next = ListNode(0)
p.next.next.next.next.next.next.next = ListNode(1)
l2 = ListNode(3)
l2.next = ListNode(7)
l3 = ListNode(9)
l3.next = ListNode(2)
l4 = ListNode(5)
l5 = ListNode(5)
l6 = ListNode(9)
l7 = ListNode(9)
l7.next = ListNode(9)
y = addTwoNumbers(l2,l3)
while y.next!=None:
print(y.val)
y = y.next
這道題其實蠻簡單的,沒有什麼複雜性,主要是細節要注意。
今日leetecode完成!