LeetCode #2.两数相加

news2024/9/20 5:28:52

力扣 | 2.两数相加

题目截图

 官方方法

总共有三个链表,l1,l2和最后的结果链表。l1和l2各自滑动对应链表各个位数支出相应的值,最后相加,将结果添加到新链表上。

唯一需要考虑的是数值相加后的进位。

先设置进位carry为0

结果相加的时候利用取模和取整来进位。

比如,8+7=15,各位留5,进位为1。

创建一个头结点head和一个移动结点p

当l1或l2存在时,新建一个结点new_point并赋值为0。然后进入判断:

若l1不存在,则只用将l2的值付给新链表。反之,亦然。若两个都存在,则当前位的值为(l1的值+l2的值)取模,进位为两者之和除10取整。,然后指针往后滑动,知道l1和l2都遍历完成

还需要注意全部遍历完成后可能还有进位,再添加一个结点,并赋值为1。

最后返回头结点。

代码如下

 def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        head = point =  ListNode(0)
        carry = 0

        while l1 or l2:
            new_point = ListNode(0)

            if not l1:
                sum_=l2.val+carry
                new_point.val = sum_ % 10
                carry = sum_ // 10
                l2 = l2.next
            elif not l2:
                sum_ = l1.val +carry
                new_point.val = sum_ % 10
                carry = sum_ // 10
                l1 = l1.next
            else:
                sum_ = l1.val + l2.val + carry
                new_point.val = sum_ % 10
                carry = sum_ // 10
                l1 = l1.next
                l2 = l2.next
            point.next = new_point
            point = point.next

        if carry:
            new_point = ListNode(1)
            point.next = new_point
        return head.next

完整测试代码

# Definition for singly-linked list.
from typing import Optional

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        head = point =  ListNode(0)
        carry = 0

        while l1 or l2:
            new_point = ListNode(0)

            if not l1:
                sum_=l2.val+carry
                new_point.val = sum_ % 10
                carry = sum_ // 10
                l2 = l2.next
            elif not l2:
                sum_ = l1.val +carry
                new_point.val = sum_ % 10
                carry = sum_ // 10
                l1 = l1.next
            else:
                sum_ = l1.val + l2.val + carry
                new_point.val = sum_ % 10
                carry = sum_ // 10
                l1 = l1.next
                l2 = l2.next
            point.next = new_point
            point = point.next

        if carry:
            new_point = ListNode(1)
            point.next = new_point
        return head.next

class Linked_List:
    def create_linked_list(self, nums):
        if len(nums) == 0:
            return None
        head = ListNode(nums[0])
        cur = head
        for i in range(1, len(nums)):
            cur.next = ListNode(nums[i])
            cur = cur.next
        return head

def print_linked_list(list_node):
    if list_node is None:
        return

    cur = list_node
    while cur:
        print(cur.val, '->', end=' ')
        cur = cur.next
    print('null')


class main:
    list_1 = [2,4,3]
    list_2 = [5,6,4]
    solution = Solution()
    link_list = Linked_List()
    head_1 = link_list.create_linked_list(list_1)
    head_2 = link_list.create_linked_list(list_2)
    answer = solution.addTwoNumbers(head_1, head_2)
    print_linked_list(answer)

if __name__ == '__main__':
    main()

pycharm上测试结果

 

简化代码版

简化代码版的思路和官方方法相差不大。

但是直接将l1和l2以及进位的问题合并考虑,并运用三元表达式简化代码量。

代码如下

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        head = p = ListNode(None)
        carry = 0
        while l1 or l2 or carry:
            carry += (l1.val if l1 else 0) + (l2.val if l2 else 0)
            p.next = ListNode(carry % 10)
            p = p.next
            carry = carry // 10
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        return head.next

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计考试系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何系统全面的成为一个网络工程师?看完这个你就懂了

如何系统全面的成为一个网络工程师?总有粉丝这样问我,今天就来给大家推荐一个方法。 想要真正系统全面地成为一个网络工程师,掌握系统全面的网络技术的话,我这边建议的话还是完整的学一下华为认证HCIA、HCIP、HCIE,这三…

JavaScript -- Date对象及常用方法介绍

文章目录Date1 Date介绍2 常用方法介绍3 创建指定日期的Date对象4 日期的格式化Date Date - JavaScript 1 Date介绍 在JS中所有的和时间相关的数据都由Date对象来表示 创建Date对象 let d new Date() // 直接通过new Date()创建时间对象时,它创建的是当前的时…

双12哪些数码好物实用不吃灰?2022最值得入手的数码好物推荐

年末的双十二来了,相信不少人像我一样已经将自己想买的一些数码产品加入购物车啦。实用性强的数码产品才是最好的,才能最大程度地体现它的价值。那么,有哪些数码好物实用性强且不吃灰呢?下面,我来给大家推荐几款2022最…

电力系统的延时功率流 (CPF)的计算【 IEEE-14节点】(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文&…

计算机网络-排队时延和分组丢失

有志者,事竟成 文章目录一、描述1、排队时延和分组丢失二、总结一、描述 1、排队时延和分组丢失 每台分组交换机有多条链路与之相连。对于每条相连的链路,该分组交换机具有一个输出缓存也称为输出队列,它用于存储路由器准备发往那条链路的分…

数字图像处理实验(四)|图像压缩与编码实验{JPGE编码、离散余弦变换DCT、图像分块dctmtx|blkproc}(附matlab实验代码和截图)

文章目录一、 实验目的二、 实验原理1.图像压缩基本概念及原理(1)无损压缩编码种类(2)有损压缩编码种类(3)混合编码2. JPEG压缩编码原理(1)使用正向离散余弦变换(forward discrete cosine transform&#x…

压缩与打包

压缩文件 准备工作 命令:gzip -v anaconda-ks.cfg 压缩之后,原文件删除,只有压缩文件 解压文件 解压缩之后,压缩文件删除,生成原文件 tar命令 生成打包文件 清空/tmp/part1目录 将/etc目录拷贝到/tmp/part1…

展望未来 | Google Play 与时俱进,奔赴下一个十年

作者 / Google Play 产品总监 Alex Musil对于 Google Play 来说,今年是具有里程碑意义的重要年份。不久前,我们迎来了十周年纪念,而现在,我们将展望未来十年,思考我们的平台需要怎样发展完善,与时俱进。为此…

浏览器格式化文件代码以及浏览器调试小技巧

前端开发之浏览器格式化文件代码前言效果图1、在谷歌浏览器中查看源文件2、在谷歌浏览器中的源文件点击下面的{}就会生成相应的格式话文件3、中断调试:添加断点后,当JS代码运行到断点时会中断(对于添加了中断条件的断点在符合条件时中断&…

CSS媒体查询简介及案例

文章目录一、简介二、使用方式2.1 目标2.2 import2.3 link、source等2.4 media2.5 其他三、媒体类型(Media Types)3.1 简介3.2 常见的媒体类型值3.3 已废弃媒体类型四、媒体特性(Media Features)4.1 简介4.2 常见媒体特性简介五、媒体查询 - 逻辑操作符(Logical Operators)5.1 …

金色传说:SAP-QM-周期性检验:MSC1N/MSC2N/MSC3N下一次检验日期逻辑问题

文章目录前言一、实现方案二、收货测试1.建立生产订单2.触发周期检验前言 物料在存储过程中,通常会有定期检验,也叫周期性检验的需求,这里给大家分享下周期性检验的实现过程。 一、实现方案 1.首先要在TCode:MM02-质量管理视图中…

数据结构的起航,用C语言实现一个简约却不简单的顺序表!(零基础也能看懂)

目录 0.前言 1.线性表 2.顺序表 2.1什么是顺序表 2.2 顺序表结构体设计 2.3 顺序表的初始化 2.4 顺序表的销毁 2.5* 顺序表的尾插 2.6* 顺序表的尾删 2.7 顺序表的头插 2.8 顺序表的头删 2.9 顺序表的查找 2.10 顺序表的插入(任意位置) 2.11…

载药磷酸钙纳米粒子;载药阿奇霉素纳米粒子;载药酪蛋白纳米粒子

产品名称:载药磷酸钙纳米粒子;载药阿奇霉素纳米粒子;载药酪蛋白纳米粒子 英文名称:Drug loaded calcium phosphate nanoparticles; Azithromycin loaded nanoparticles; Drug loaded casein nanoparticles 描述: 磷…

C# --- 结构体

1.结构体与类的第一个区别是创建的时候使用的关键字不同 --- 结构体 struct ; 类是 class 2.结构体中不能够自定义无参构造函数,因为结构体中已经隐式包含了一个无参构造函数,这个不像类中自带无参构造函数可以被我们替代,它是无法替代的 3…

OSWE 考试总结

背景 今天,2022年12月6日,我收到了 OSWE 考试通过的邮件。至此,Offsensive Security 之旅告一段落。我拿到了 KLCP, OSCP, OSEP, OSED, OSWE, OSCE3。圆满完成三月份立下的 FLAG,没有打脸。 这里,小小总结一下 OSWE …

Apache服务深入学习篇(详细介绍)

什么是Apache? Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速…

汽车电子之功能安全介绍

功能安全介绍 1.什么是功能安全FS? 2.为什么需要功能安全? 3.认识标准《ISO26262》。 4.怎么评估ASIL 等级? 5.功能安全怎么做(措施)? 6.参考资料 1.什么是功能安全FS? (1)功能安全的发展过…

VM系列振弦采集模块频率计算与质量评定

VM系列振弦采集模块频率计算与质量评定 运用采集到的若干信号样本数据, 首先估算得到一个频率值,称为“ 伪频率值” ;然后在模块异常数据剔除算法模型中, 以寄存器 CAL_PAR1 的值作为主要判定参数, 每个采样值与伪频…

微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.3 精确查询

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构22 DSL 查询语法22.3 精确查询22.3.1 精确查询22.3.2 精确查询 - 语法22.3…