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

本科自考是什么意思/seo网站关键词优化价格

本科自考是什么意思,seo网站关键词优化价格,web毕业设计题目,网站建设和管理维护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.whsansanxincailiao.cn/news/31944468.html

相关文章:

  • 做网站如何语音/网站转让出售
  • 企业如何做网站建站/网址最全的浏览器
  • 手机上自己如何做网站/云南网站seo服务
  • 诏安县城乡规划建设局网站/免费的模板网站
  • 网站空间容量/域名注册需要多少钱?
  • google seo整站优化/抖音seo查询工具
  • web网站开发参考文献/如何推广自己的微信公众号
  • 本地linux做网站/查询友情链接
  • 恒大地产最新消息/网站免费seo
  • 怎样进入网站的后台/重庆seo排名技术
  • wordpress安装插件导致网站/营销网址
  • 梅州网站建设wlwl/广州seo公司推荐
  • b2b行业网站建设/徐汇网站建设
  • 黄页网站推广软件/seo的培训班
  • 交流网站模版/做一个公司网页多少钱
  • 网站建设后期服务收费标准/seo关键词优化报价价格
  • wordpress传到ftp/徐州seo外包
  • 建设职业注册中心网站/优化是什么意思
  • 网站备案简介怎么写/网络营销推广的方法
  • 40平米小户型装修效果图/现在的seo1发布页在哪里
  • 外包网站开发/百度app安卓版下载
  • 织梦做淘宝客网站视频/全国网站排名
  • 网站开发文案模板/网站seo方法
  • 做网站建设注册商标是多少类/太原网站推广排名
  • wordpress无法用qq邮箱验证/株洲seo优化推荐
  • 电商网站建设推广/网络舆情监测平台
  • 公司网站开发费用记入什么科止/天津外贸seo推广
  • asp网站首页模板/全国疫情高峰时间表最新
  • 苏州规划建设局网站/太原百度快照优化排名
  • 江苏建设人才网查询/百度推广优化师