python3两数相加

python3两数相加

两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

在这里插入图片描述

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

思路:

1.创建一个新链表,新链表的头部先设置为l1头部和l2头部之和。
2.遍历两个链表,只要有一个还没有遍历完就继续遍历
3.每次遍历生成一个当前节点cur的下一个节点,其值为两链表对应节点的和再加上当前节点cur产生的进位
4.更新进位后的当前节点cur的值
5.循环结束后,因为首位可能产生进位,因此如果cur.val是两位数的话,新增一个节点
6.返回头节点

由题目注释可以看出listNode这个类是用来创建链表的,默认next=None,val=0.
Definition for singly-linked list.
class ListNode:
def init(self, val=0, next=None):
self.val = val
self.next = next

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(l1.val+l2.val)
        current = head
        while l1.next or l2.next:
            l1 = l1.next if l1.next else ListNode()
            l2 = l2.next if l2.next!=None else ListNode()
            current.next = ListNode(l1.val+l2.val+current.val//10)
            current.val = current.val%10
            current = current.next
        if current.val >= 10:
            current.next = ListNode(current.val//10)
            current.val = current.val%10
        return head

改进改进:增加了空间复杂度。本以为一方为None后直接把另一个链表连上就ok了。然后,就打脸了。
在这里插入图片描述
然后又加了while


> [9999]

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(l1.val+l2.val)
        current = head
        while l1.next and l2.next:
            l1 = l1.next 
            l2 = l2.next 
            current.next = ListNode(l1.val+l2.val+current.val//10)
            current.val = current.val%10
            current = current.next
        if l1.next == None and l2.next :
            while l2.next:
                l2 = l2.next
                current.next= ListNode(l2.val+current.val//10)
                current.val = current.val%10
                current = current.next
                current.next = l2.next
        elif l2.next == None and l1.next:
            while l1.next:
                l1 = l1.next
                current.next= ListNode(l1.val+current.val//10)
                current.val = current.val%10
                current = current.next
                current.next = l2.next
        if current.val >= 10:
            current.next = ListNode(current.val//10)
            current.val = current.val%10
        return head

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100093.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 仿射函数_仿射空间

    仿射函数_仿射空间今天看书用到仿射函数,不明白,上网查资料,貌似网上这方面资料也不是很多,有的也是讨论性质,不太准确。找到一些英文资料,现总结如下:线性(linear)定义:1:原空间内:如果在原空间内f(x+y

  • eplan激活码破解步骤视频【中文破解版】

    (eplan激活码破解步骤视频)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~C…

  • 我的数据分析师转型之路,从零到字节跳动数据分析师

    我的数据分析师转型之路,从零到字节跳动数据分析师从一个什么都不懂的小白,到现在字节跳动的数据分析师,我用了大概1年的时间,在这里想给大家分享一下我的转行经历,希望能有一些帮助。出于隐私考虑,我就全部打码了。。。先说一下个人背景,本科是工科相关,非计算机非统计学,硕士是金融相关,基本也算是和数据分析没什么关系,毕业之前有过迷茫,因为自己其实也不知道到底适不适合金融行业,而且上学的时候没有认真搞过什么银行、券商的实习,基本毕业就是凉凉的节奏。所…

  • Mysql分库分表方案,如何分,怎样分?

    Mysql分库分表方案,如何分,怎样分?

  • Torando源码解析之XSRF防护的实现

    Torando源码解析之XSRF防护的实现Torando源码解析之XSRF防护的实现Torando源码解析之XSRF防护的实现Tornado开启XSRF防护的方法源码解析xsrf_form_html()是什么self.xsrf_token是什么Tornado开启XSRF防护的方法http://tornado-zh.readthedocs.io/zh/latest/guide/security.ht…

  • UML——九种图和几大关系

    UML——九种图和几大关系UML——九种图和几大关系

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号