栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode--Add Two Numbers--ListNode

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode--Add Two Numbers--ListNode

计算机小白,今天做题的时候遇到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 链表。应该是这样。(如果我猜错了,那就是我猜错了)

行,感谢浏览,生活愉快

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461427.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号