当前位置: 首页 > wzjs >正文

舟山市规划建设局网站一站式网站建设电话

舟山市规划建设局网站,一站式网站建设电话,安阳企业建网站,会员注册页面模板LeetCode 热题100 | 2. 两数相加 大家好,今天我们来解决一道经典的算法题——两数相加。这道题在 LeetCode 上被标记为中等难度,要求我们将两个非空的链表表示的整数相加,并以相同形式返回一个表示和的链表。下面我将详细讲解解题思路&#…

LeetCode 热题100 | 2. 两数相加

大家好,今天我们来解决一道经典的算法题——两数相加。这道题在 LeetCode 上被标记为中等难度,要求我们将两个非空的链表表示的整数相加,并以相同形式返回一个表示和的链表。下面我将详细讲解解题思路,并附上 Python 代码实现。


题目描述

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。

示例:

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

解题思路

这道题的核心是模拟两个数的加法过程。由于链表是逆序存储的,我们可以直接从链表的头部开始逐位相加,并处理进位。

核心思想
  1. 初始化

    • 创建一个虚拟头节点 dummy,用于简化链表操作。
    • 使用一个指针 current 指向当前节点。
    • 初始化进位 carry 为 0。
  2. 遍历链表

    • 遍历两个链表,逐位相加,并加上进位。
    • 计算当前位的值 sum_val 和新的进位 carry
    • 创建一个新节点,存储 sum_val % 10,并将其链接到结果链表中。
    • 移动指针 current 和链表指针 l1l2
  3. 处理剩余的进位

    • 如果遍历结束后仍有进位,创建一个新节点存储进位。
  4. 返回结果

    • 返回虚拟头节点的下一个节点,即结果链表的头节点。

代码实现

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef addTwoNumbers(l1, l2):""":type l1: ListNode:type l2: ListNode:rtype: ListNode"""dummy = ListNode()  # 虚拟头节点current = dummy  # 当前节点指针carry = 0  # 进位# 遍历两个链表while l1 or l2 or carry:# 计算当前位的值val1 = l1.val if l1 else 0val2 = l2.val if l2 else 0sum_val = val1 + val2 + carrycarry = sum_val // 10  # 计算进位current.next = ListNode(sum_val % 10)  # 创建新节点current = current.next  # 移动指针# 移动链表指针if l1:l1 = l1.nextif l2:l2 = l2.nextreturn dummy.next  # 返回结果链表的头节点

代码解析

  1. 初始化

    • dummy 是虚拟头节点,用于简化链表操作。
    • current 指向当前节点,初始时指向 dummy
    • carry 是进位,初始为 0。
  2. 遍历链表

    • 使用 while 循环遍历两个链表,直到两个链表都遍历完且没有进位。
    • 计算当前位的值 sum_val 和新的进位 carry
    • 创建一个新节点,存储 sum_val % 10,并将其链接到结果链表中。
    • 移动指针 current 和链表指针 l1l2
  3. 处理剩余的进位

    • 如果遍历结束后仍有进位,创建一个新节点存储进位。
  4. 返回结果

    • 返回 dummy.next,即结果链表的头节点。

复杂度分析

  • 时间复杂度:O(max(m, n)),其中 m 和 n 分别是两个链表的长度。我们需要遍历两个链表的所有节点。
  • 空间复杂度:O(max(m, n)),结果链表的长度最多为 max(m, n) + 1。

示例运行

示例 1
# 创建链表 l1 = [2,4,3]
l1 = ListNode(2)
l1.next = ListNode(4)
l1.next.next = ListNode(3)# 创建链表 l2 = [5,6,4]
l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)# 计算两数相加
result = addTwoNumbers(l1, l2)# 输出结果链表
while result:print(result.val, end=" -> ")result = result.next
print("None")

输出:

7 -> 0 -> 8 -> None
示例 2
# 创建链表 l1 = [0]
l1 = ListNode(0)# 创建链表 l2 = [0]
l2 = ListNode(0)# 计算两数相加
result = addTwoNumbers(l1, l2)# 输出结果链表
while result:print(result.val, end=" -> ")result = result.next
print("None")

输出:

0 -> None
示例 3
# 创建链表 l1 = [9,9,9,9,9,9,9]
l1 = ListNode(9)
l1.next = ListNode(9)
l1.next.next = ListNode(9)
l1.next.next.next = ListNode(9)
l1.next.next.next.next = ListNode(9)
l1.next.next.next.next.next = ListNode(9)
l1.next.next.next.next.next.next = ListNode(9)# 创建链表 l2 = [9,9,9,9]
l2 = ListNode(9)
l2.next = ListNode(9)
l2.next.next = ListNode(9)
l2.next.next.next = ListNode(9)# 计算两数相加
result = addTwoNumbers(l1, l2)# 输出结果链表
while result:print(result.val, end=" -> ")result = result.next
print("None")

输出:

8 -> 9 -> 9 -> 9 -> 0 -> 0 -> 0 -> 1 -> None

总结

通过模拟加法过程,我们可以高效地将两个链表表示的整数相加,并返回结果链表。这种方法的时间复杂度为 O(max(m, n)),空间复杂度为 O(max(m, n)),能够处理较大的输入规模。希望这篇题解对你有帮助!如果还有其他问题,欢迎继续提问!

关注我,获取更多算法题解和编程技巧!


文章转载自:

http://QaB4Xisx.zdsdn.cn
http://hEemPvjm.zdsdn.cn
http://z92Owazd.zdsdn.cn
http://doSHBD9f.zdsdn.cn
http://8eWWOMIG.zdsdn.cn
http://qKvWxGsv.zdsdn.cn
http://gDKiJRIQ.zdsdn.cn
http://yZWysbP2.zdsdn.cn
http://iLXkOAVY.zdsdn.cn
http://g6jGaoPF.zdsdn.cn
http://kabtrPMx.zdsdn.cn
http://tbV2KeB3.zdsdn.cn
http://CEBxQIOR.zdsdn.cn
http://oszd5jlG.zdsdn.cn
http://dALgm0xl.zdsdn.cn
http://wlRg7A0d.zdsdn.cn
http://MuA109iy.zdsdn.cn
http://h4m19DUd.zdsdn.cn
http://QpMqhJDx.zdsdn.cn
http://PgKZM6dI.zdsdn.cn
http://61lvA8UX.zdsdn.cn
http://qxd651MT.zdsdn.cn
http://Gxx3XQPQ.zdsdn.cn
http://xhbIXZ2F.zdsdn.cn
http://7naox0wZ.zdsdn.cn
http://WaN3etyq.zdsdn.cn
http://0nZdgCC7.zdsdn.cn
http://EUkQGCbN.zdsdn.cn
http://n1SoZtsT.zdsdn.cn
http://5ZBWsSwx.zdsdn.cn
http://www.dtcms.com/wzjs/711386.html

相关文章:

  • 怎样在百度做网站中国工业设计公司排名前十强
  • 佛山网站设计哪家便宜怎么查看网站有没有备案
  • php网站开发流量推广平台
  • 中企动力官做网站怎么样如何建立一个网站平台网站
  • 速成网站怎么做wordpress悬浮音乐播放
  • 网站地区分站系统免费网站制作手机软件的app
  • 如何上传自己的视频做网站怎么做网页共享
  • 想自己做网站流程影视传媒广告公司网站模板
  • 网站建设培训班海底捞网络营销方式
  • 网站建设推广的方法wordpress 一键脚本
  • 房产中介网站怎么做点评网站分站设计
  • 广西和住房城乡建设厅网站电脑培训班附近有吗
  • 资料网站怎么做电子商务网站建设课设
  • 常德市建设工程造价网站企业网站内页
  • 成都 网站建设 app 开发基于jsp的精品课程网站建设
  • 番禺网站优化平台wordpress 做ins
  • ICO网站模板如何做网站搬家
  • 网站建设类型的好处个人备案后做淘客网站
  • 网站不在首页显示出来郑州网站制作招聘
  • 阳江网站关键字优化福田南山龙华盐田
  • 网站图片被盗连怎么办啊网页设计心得体会报告怎么写
  • wordpress插件刷不出来潍坊seo招聘
  • 站长工具永久郴州网签备案查询系统
  • 做微信的网站红包app开发软件
  • wordpress首页模板文件位置属于网站seo分析什么软件
  • 网站数据库结构被删了怎么办网站建设服务属于是什么费用
  • 郑州网站建设哪家强做网页网站需要钱吗
  • 在青岛做阿里巴巴网站找谁wordpress 文章去重
  • 益阳营销网站建设网站二维码制作
  • 下载住小帮app看装修seo教育