当前位置: 首页 > 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://www.dtcms.com/wzjs/522454.html

相关文章:

  • 加强政府网站信息建设通知手机网络优化软件
  • 小学网站建设方案长春网站排名提升
  • 网站建设注册科技网站建设公司
  • 沈阳做网站需要多少钱智慧软文
  • 做购物网站的开题报告公司官网怎么做
  • 上海网站建设建站seo搜索引擎优化价格
  • 中国建设部官网信息查询北京搜索引擎优化管理专员
  • 新河官网长沙关键词优化公司电话
  • 如何做网站栏目规划seo网站优化平台
  • 池州市建设管理处网站网络营销的认知
  • 域名解析后怎么做网站武汉百度快速排名提升
  • 怎么做加盟美容院网站seo搜索优化排名
  • 成都网站建设哪里好百度引擎提交入口
  • 做试管网站东莞关键词优化平台
  • 遵义企业做网站中牟网络推广
  • 做网站凡科如何官网seo哪家公司好
  • 手机wap网站开发的cms系统正规手游代理平台有哪些
  • 宿舍管理网站建设怎么推广网页
  • 网站开发推广渠道seo创业
  • 外贸自建站平台排名seo站长教程
  • 女生做网站编辑北京seo关键词优化收费
  • 上海网站建设 美橙比较靠谱的网站
  • 建网站手机网店推广策划书
  • 互动网站建设公司河北百度竞价优化
  • 湖南做网站 尖端磐石网络电商怎么推广自己的产品
  • 全球购物网站大全淘宝怎么做引流和推广
  • 时彩网站开发武汉百度推广入口
  • 怎么对网站的数据库做管理苏州优化收费
  • 长春网络公司宣传来宾网站seo
  • 飞凡 做电商网站软件测试培训费用大概多少