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

LeetCode 热题100 2. 两数相加

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)),能够处理较大的输入规模。希望这篇题解对你有帮助!如果还有其他问题,欢迎继续提问!

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

相关文章:

LeetCode 热题100 2. 两数相加

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

深度学习技术全景图:从基础架构到工业落地的超级进化指南

🔍 目录导航 基础架构革命训练优化秘技未来战场前瞻 🧩 一、基础架构革命 1.1 前馈神经网络(FNN) ▍核心结构 import torch.nn as nnclass FNN(nn.Module):def __init__(self):super().__init__()self.fc1 nn.Linear(784, 25…...

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装(核显跳过此步骤) CUDA Toolkit是NVIDIA的开发工具,里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本,如何去下载对应版本的Toolkit工…...

IO/网络IO基础全览

目录 IO基础CPU与外设1. 程序控制IO(轮询)2. 中断中断相关知识中断分类中断处理过程中断隐指令 3. DMA(Direct Memory Access) 缓冲区用户空间和内核空间IO操作的拷贝概念传统IO操作的4次拷贝减少一个CPU拷贝的mmap内存映射文件(m…...

【DeepSeek-R1背后的技术】系列十一:RAG原理介绍和本地部署(DeepSeekR1+RAGFlow构建个人知识库)

【DeepSeek-R1背后的技术】系列博文: 第1篇:混合专家模型(MoE) 第2篇:大模型知识蒸馏(Knowledge Distillation) 第3篇:强化学习(Reinforcement Learning, RL)…...

鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影)

鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影) 1、效果展示2、ets/pages/Home.ets3、ets/views/Home/SearchBar.ets4、ets/views/Home/NavList.ets5、ets/views/Home/TileList.ets6、ets/views/Home/PlanList.ets7、后端…...

【数据结构】B树家族详解:B树、B+树、B*

一、B树(B-Tree) 1. 定义 B树是一种平衡多路查找树,自平衡的树,能够保持数据有序,设计目标是为减少磁盘I/O次数。适用于需要频繁读写磁盘的场景(如数据库、文件系统)。 2、B树基本性质 节点键值数量限制: 对于 m 阶 B 树,根节点至少有 1 个键值,最多有 m - 1 个…...

C语言数据结构—二叉树的链式结构实现

目录 1、建立二叉树 1.1 二叉树的结构 1.2 手动建立二叉树 2、二叉树的遍历 2.1 二叉树的三种遍历方式 2.1.1 前序遍历 2.1.2 中序遍历 2.1.2 后序遍历 3、求二叉树的结点数和二叉树的高度 3.1 求二叉树结点数 3.2 求二叉树叶子结点 3.3 求二叉树第k层结点的个数 …...

Java 大视界 —— Java 大数据在智能零售动态定价策略中的应用实战(98)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

如何实现修改jvm中类的属性开源项目

根据你的需求,以下是一些可以实现类似阿里巴巴 Diamond 功能的框架和工具,这些项目可以帮助你动态推送配置信息,从而实现类似的功能: 1. Nacos Nacos 是一个更现代的动态配置服务,支持配置管理、服务发现和元数据管理…...

危化品经营单位安全管理人员的职责及注意事项

危化品经营单位安全管理人员肩负着保障经营活动安全的重要责任,以下是其主要职责及注意事项: 职责 1. 安全制度建设与执行:负责组织制定本单位安全生产规章制度、操作规程和生产安全事故应急救援预案,确保这些制度符合国家相关法…...

腾讯云大模型知识引擎×DeepSeek赋能文旅

腾讯云大模型知识引擎DeepSeek赋能文旅 ——以合肥文旅为例的技术革新与实践路径 一、技术底座:知识引擎与DeepSeek的融合逻辑 腾讯云大模型知识引擎与DeepSeek模型的结合,本质上是**“知识库检索增强生成(RAG)实时联网能力”**…...

Day 49 卡玛笔记

这是基于代码随想录的每日打卡 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变…...

WebXR教学 01 基础介绍

什么是WebXR? 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实(VR)和增强现实(AR)应用的技术标准。它由 W3C 的 Immersive Web 工作组开发,旨在提供跨设备的沉浸式体验…...

DeepSeek+Kimi生成高质量PPT

DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成结构化PPT大纲(擅长逻辑构建与内容优化)Kimi核心作用:将文本转换为视觉化PPT(提供模板库与排版引擎) 二、操作步骤详解 1. 通…...

hot100---day3

二叉树复习hot100专题 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 递归法的前中后序遍历&#xff0c;格式比较一致&#xff1b; class Solution { public:vector<int>& traversal(TreeNode* root, vector<int>& ans){if(rootnullpt…...

clickhouse--表引擎的使用

表引擎决定了如何存储表的数据。包括&#xff1a; 数据的存储方式和位置&#xff0c;写到哪里以及从哪里读取数据。(默认是在安装路径下的 data 路径)支持哪些查询以及如何支持。&#xff08;有些语法只有在特定的引擎下才能用&#xff09;并发数据访问。索引的使用&#xff0…...

tauri输入js脚本的方法和注意事项initialization_script

注入js脚本最常用的就是initialization_script&#xff0c;通过这个方法注入的js脚本在页面每个页面都会执行&#xff0c;这个在tauri文档也可以搜到&#xff1a;WebviewWindowBuilder in tauri::webview - Rust&#xff0c;但是请注意&#xff0c;这个方法只能用在WindowBuild…...

注意力机制深度优化

###一、注意力机制深度优化 1.FlashAttentionV3(2024最新版) # 安装最新版&#xff08;需H100/A100 GPU&#xff09; pip install flash-attn3.0.0 --no-build-isolation# 启用FP8混合精度&#xff08;需H100&#xff09; model AutoModelForCausalLM.from_pretrained("…...

基于springboot的学习社区博客

一、系统架构 前端&#xff1a;html | bootstarp | jquery | css | ajax 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据 三、功能介绍 01. web端-注册 02. web端-登录 03. web端-首页 04. web端-文章明…...

python-leetcode 42.验证二叉搜索树

题目&#xff1a; 给定二叉树的根节点root,判断是否是一个有效二叉搜索树 有效二叉搜索树&#xff1a; 1.节点的左子树只包含小于当前节点的树 2.节点的右子树只包含大于当前节点的树 3.所有左子树和右子树自身必须也是二叉搜索树 方法一&#xff1a;递归 如果该二叉树的…...

基于PSO-LSTM长短期记忆神经网络的多分类预测【MATLAB】

一、研究背景与意义 在时间序列分类、信号识别、故障诊断等领域&#xff0c;多分类预测任务对模型的时序特征捕捉能力提出了极高要求。传统LSTM网络虽能有效建模长程依赖关系&#xff0c;但其性能高度依赖超参数的选择&#xff0c;例如隐含层神经元数量、学习率、迭代次数等。…...

拓扑排序的核心算法:BFS应用与实践

目录 一、拓扑排序简介 二、BFS解决拓扑排序的步骤 三、C实现 四、代码解释 五、总结 一、拓扑排序简介 拓扑排序是对有向无环图&#xff08;DAG&#xff09;进行排序的一种方法&#xff0c;使得对于图中的每一条有向边 (u, v)&#xff0c;u 在排序中总是位于 v 的前面。拓…...

ZLMediaKi集群设置

要在集群环境中部署 ZLMediaKit&#xff0c;您可以按照以下步骤进行操作。ZLMediaKit 是一个高性能的流媒体服务器&#xff0c;支持 RTMP、RTSP、HLS 等协议。以下是一个详细的集群部署方案&#xff1a; ### 1. 环境准备 - **服务器**&#xff1a;准备多台服务器&#xff0c;…...

Linux下网络运维命令总结

一、网络连通性测试 ping 作用&#xff1a;检测目标主机是否可达&#xff0c;并测量网络延迟。 示例&#xff1a; ping www.example.com持续发送ICMP报文&#xff0c;按CtrlC停止。 ping -c 4 www.example.com发送4个ICMP报文后停止。 traceroute 作用&#xff1a;显示数据包…...

10. 九转金丹炼矩阵 - 矩阵置零(标记优化)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的金丹谷,谷中有一座巨大的九转金丹炉,炉身闪烁着神秘的光芒。金丹炉的入口处有一块巨大的石碑,上面刻着一行文字:“欲破此炉,需以九转金丹之力,炼矩阵之零,标记优化定乾坤。” 哪吒定睛一看,石碑上还有…...

Cocos Creator Shader入门实战(一):材质和Effect的了解

引擎版本&#xff1a;3.8.5 环境&#xff1a; Windows 简介 在Cocos Creator中&#xff0c;游戏炫彩缤纷的效果是借助着色器(Shader)来实现的。 Cocos主要基于OpenGL ES&#xff0c;而Shader的编写则是在可编程渲染管线中基于修改&#xff1a;顶点着色器(Vertex) 和 片段着色…...

学习笔记04——JMM内存模型

一、Java内存模型&#xff08;JMM&#xff09;是什么&#xff1f; Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java多线程编程中共享内存的访问规则&#xff0c;定义了线程如何与主内存&#xff08;Main Memory&#xff09;和工作内存&#xff08;Work Mem…...

前端面试真题 2025最新版

文章目录 写在前文CSS怪异盒模型JS闭包闭包的形成闭包注意点 CSS选择器及优先级优先级 说说flex布局及相关属性Flex 容器相关属性&#xff1a;Flex 项目相关属性 响应式布局如何实现是否用过tailwindcss&#xff0c;有哪些好处好处缺点 说说对象的 prototype属性及原型说说 pro…...

Android 老项目 jcenter 库失效

最近重新维护了一些老项目发现大部分jcenter库失效了&#xff0c; Could not resolve com.xx:2.1.3. 如果你也遇到了&#xff0c;不妨试试 替换为 aliyun的jcenter服务&#xff0c;就不用一个个找代替库了。 project 下的 build.gradle 文件添加&#xff1a; maven { url htt…...