计算机小白,今天做题的时候遇到Add Two Numbers,刚刚开始用leetcode,这是我做的第二题,哈哈哈
题目如下:
然后还有示例:
Example 1: Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807. Example 2: Input: l1 = [0], l2 = [0] Output: [0] Example 3: Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] Output: [8,9,9,9,0,0,0,1]
然后它给我一个链表,数据类型是ListNode,我开始没注意,然后把它当列表处理了,结果报错。然后我就想啊,他给的是一个列表诶,嘛情况。然后查百度发现这是一种java中的链表结构,python要实现得自己写代码(因为用的是python,没了解过java,)
边做边学嘛,然后我就找了python实现ListNode代码-- ListNode的python 实现 - 未完待续z - 博客园
然后我就大概懂了,一条线多个点,每个点包含两个信息,一个是当前点的值,一个是下一个点的信息。其实就我理解哈,感觉像是套娃,一个套一个的,就好像这样 (100(23(10(33)))) 最外面那个点的值是100,然后同时包含值是23的下一个点的所有,同时下一个点又包含了下下一个点的所有…就这样,到最后一个点,它没有下一个点,就结束了。
然后解决了这个ListNode的问题,我就又开始试着解决那个两数求和的问题了。我先在pycharm上写好代码调试好(测试过),然后放到leetcode上结果还是报错了,不过还好这次只是结果对不上,我就找啊找,后面发现了问题。
我前面找的ListNode的python实现对给定的输入 [2, 4, 9] 结果是这样的:
node: <__main__.Node object at 0x0000021A7BAC9C70> value: 9 next: <__main__.Node object at 0x0000021A7BAC9D60> node: <__main__.Node object at 0x0000021A7BAC9D60> value: 4 next: <__main__.Node object at 0x0000021A7BAC9DC0> node: <__main__.Node object at 0x0000021A7BAC9DC0> value: 2 next: None
看这个输出,应该是这样:9 -> 4 -> 2 相当于我理解的这样(9(4(2)))
然后我在leetcode上试了下同样的输入,结果如下:
('nnode: ', ListNode{val: 2, next: ListNode{val: 4, next: ListNode{val: 9, next: None}}}, ' value: ', 2, ' next: ', ListNode{val: 4, next: ListNode{val: 9, next: None}})
('nnode: ', ListNode{val: 4, next: ListNode{val: 9, next: None}}, ' value: ', 4, ' next: ', ListNode{val: 9, next: None})
('nnode: ', ListNode{val: 9, next: None}, ' value: ', 9, ' next: ', None)
个人理解哈:这个结果意思应该是 2 -> 4 -> 9 相当于这样(2(4(9)))
到这里就已经可以相应的解决问题了,我的代码如下:
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
str1 = ''
str2 = ''
while l1:
str1 = str1 + str(l1.val)
l1 = l1.next
while l2:
str2 = str2 + str(l2.val)
l2 = l2.next
str1 = ''.join(reversed(str1))
str2 = ''.join(reversed(str2))
str3 = str(int(str1) + int(str2))
cur_node = None
for i in str3:
l3 = ListNode()
l3.val = int(i)
l3.next = cur_node
cur_node = l3
return l3
题目是做出来了,但是还有问题啊,为什么输入同样的数据,出来的结果就不一样,我猜是leetcode中测试[2,4,9]时它会默认转化为 2 -> 4 -> 9 链表。应该是这样。(如果我猜错了,那就是我猜错了)
行,感谢浏览,生活愉快



