Leetcode刷题2---两数相加 Python

目录

  • 题目及分析
  • 解法一: 迭代法
  • 解法二: 递归法
  • 解法三:反转链表法

题目及分析

(力扣序号2:两数相加)
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
在这里插入图片描述
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

解法一: 迭代法

基本思路:

  • 创建一个哑节点作为结果链表的头节点。
  • 初始化一个变量carry为0,用于存储进位值。
  • 使用一个循环遍历两个链表,直到两个链表都为空且没有进位:
    • 将两个链表对应位置的值和carry相加。
    • 计算新的节点值和新的进位值。
    • 创建一个新节点,存储计算出的节点值,并将其连接到结果链表的末尾。
    • 移动链表指针到下一个节点。
  • 返回结果链表的头节点。
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = next# 解法一:迭代法
def add_two_numbers_iterative(l1: ListNode, l2: ListNode) -> ListNode:dummy_head = ListNode(0)current = dummy_headcarry = 0while l1 or l2 or carry:val1 = l1.val if l1 else 0val2 = l2.val if l2 else 0total = val1 + val2 + carrycarry = total // 10current.next = ListNode(total % 10)current = current.nextif l1:l1 = l1.nextif l2:l2 = l2.nextreturn dummy_head.next

解法二: 递归法

基本思路:

  • 如果两个链表和进位都为空,返回None。
  • 计算当前节点的和及新的进位值。
  • 创建一个新节点,存储计算出的节点值。
  • 递归处理下一个位置的值和进位。
  • 返回新节点。
# 解法二:递归法
def add_two_numbers_recursive(l1: ListNode, l2: ListNode, carry=0) -> ListNode:if not l1 and not l2 and not carry:return Noneval1 = l1.val if l1 else 0val2 = l2.val if l2 else 0total = val1 + val2 + carrycarry = total // 10result = ListNode(total % 10)l1_next = l1.next if l1 else Nonel2_next = l2.next if l2 else Noneresult.next = add_two_numbers_recursive(l1_next, l2_next, carry)return result

解法三:反转链表法

基本思路:

  • 由于链表存储的是逆序的数字,可以将两个链表反转,使得数字变为正序。
  • 反转后按照正常的加法计算,最后再将结果链表反转,得到最终结果。
  • 这种方法需要注意链表的反转和恢复。
# 解法三:反转链表法
def reverse_list(head: ListNode) -> ListNode:prev = Nonecurrent = headwhile current:next_node = current.nextcurrent.next = prevprev = currentcurrent = next_nodereturn prevdef add_two_numbers_reverse(l1: ListNode, l2: ListNode) -> ListNode:l1 = reverse_list(l1)l2 = reverse_list(l2)dummy_head = ListNode(0)current = dummy_headcarry = 0while l1 or l2 or carry:val1 = l1.val if l1 else 0val2 = l2.val if l2 else 0total = val1 + val2 + carrycarry = total // 10current.next = ListNode(total % 10)current = current.nextif l1:l1 = l1.nextif l2:l2 = l2.nextreturn reverse_list(dummy_head.next)

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

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

相关文章

python之音频处理(2)两个音频文件的合并

from pydub import AudioSegment# 加载两个音频文件 audio1 AudioSegment.from_file(r"D:\websiteDownload\huanxing.wav") audio2 AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很烦.wav")# 设置间隔&#xff08;单位&#xff1a;…

Altium Designer专业PCB设计软件下载安装 Altium Designer安装包下载获取

在电子设计的广袤领域中&#xff0c;PCB设计无疑占据着重要的地位。而Altium Designer作为一款业界领先的电子设计自动化软件&#xff0c;其提供的先进布局工具&#xff0c;无疑为设计师们打开了一扇通往高效、精确设计的大门。 在PCB设计的核心环节——布局中&#xff0c;Alti…

初学Spring之自动装配 Bean

Bean 的作用域&#xff1a; 1.单例模式&#xff08;Spring 默认机制&#xff09; scope“singleton” 2.原型模式&#xff1a;每次从容器中 get 时&#xff0c;都会产生一个新对象 scope"prototype" 3. request、session、application&#xff0c;只能在 web 开…

《c语言结构体怎么函数传参》

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种用户自定义的数据类型&#xff0c;用于组合多个不同类型的数据成员。当你要将结构体作为参数传递给函数时&#xff0c;可以按照以下几种方式进行&#xff1a; 值传递&#xff08;Pass by Value&#xff09;&a…

【pytorch扩展】CUDA自定义pytorch算子(简单demo入手)

Pytorch作为一款优秀的AI开发平台&#xff0c;提供了完备的自定义算子的规范。我们用torch开发时&#xff0c;经常会因为现有算子的不足限制我们idea的迸发。于是&#xff0c;CUDA/C自定义pytorch算子是不得不磕了。 今天通过一个小实验来梳理自定义pytorch算子都需要做哪些准…

软设之类的继承与泛化,多重继承

在类中&#xff0c;假如父类已经写好属性或方法&#xff0c;子类想要实现相同的功能&#xff0c;不用专门写代码&#xff0c;直接用专门的继承语言继承就可以了。 比如说有一个动物类&#xff0c;有毛色和叫这两个属性和方法&#xff0c;又写了一个子类是猫类&#xff0c;猫类…

腾讯云COS分布式对象存储

腾讯云COS分布式对象存储 腾讯云对象存储&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;是腾讯云提供的一种用于存储海量文件的分布式存储服务。 腾讯云 COS 适用于多种场景&#xff0c;如静态网站托管、大规模数据备份和归档、多媒体存储和处理、移动应用数据存…

Kafka搭建(单机版)

部署前提 VMware环境 : 两台centos系统 Jdk包:jdk-8u202-linux-x64.tar.gz Kafka包:kafka_2.12-3.5.0.tgz Zookeeper包:apache-zookeeper-3.7.2-bin.tar.gz 百度网盘自取: 链接: https://pan.baidu.com/s/11EWuhBoSmH3musd_3Rgodw?pwde32t 提取码: e32t Kafka搭建&#xff08;…

Camtasia 2024新功能 Camtasia2024更新介绍:AI剪辑助力微课制作 Camtasia2024密钥 Camtasia2023免费升级更新

Camtasia 是一款功能强大的屏幕录制和视频编辑软件&#xff0c;广泛应用于教育、商业和娱乐领域。无论是创建教学视频、产品演示、教程还是营销内容&#xff0c;Camtasia都能提供专业的工具和功能&#xff0c;帮助用户制作高质量的视频内容。 Camtasia 2024 中文免费安装包百度…

暑假学习DevEco Studio第2天

学习目标&#xff1a; 掌握页面跳转 学习内容&#xff1a; 跳转页面 创建页面&#xff1a; 在“project”窗口。打开“entry>src>main>ets”,右击“pages”&#xff0c;选择“New>ArkTS File”,命名“Second”&#xff0c;点击回车键。 在页面的路由&#xff0…

昇思25天学习打卡营第16天|文本解码原理——以MindNLP为例

在大模型中&#xff0c;文本解码通常是指在自然语言处理&#xff08;NLP&#xff09;任务中使用的大型神经网络模型&#xff08;如Transformer架构的模型&#xff09;将编码后的文本数据转换回可读的原始文本的过程。这些模型在处理自然语言时&#xff0c;首先将输入文本&#…

【Unix/Linux】Unix/Linux如何查看系统版本

Unix和Linux查看系统版本的指令有些区别&#xff0c;下面分别介绍: 一.Unix查看系统版本 在Unix系统中&#xff0c;查看系统版本的方法可能会根据具体的Unix操作系统而有所不同。以下是一些通用的方法&#xff0c;适用于多种Unix系统&#xff0c;包括但不限于Solaris、AIX、H…

vienna整流器过零畸变原因分析

Vienna整流器是一种常见的三电平功率因数校正&#xff08;PFC&#xff09;整流器&#xff0c;广泛应用于电源和电能质量控制领域。由于其高效率、高功率密度和低谐波失真的特点&#xff0c;Vienna整流器在工业和电力电子应用中具有重要地位。然而&#xff0c;在实际应用中&…

ssh:(xshell)远程连接失败

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 云服务器远程连接失败 xshell 远程连接失败 xshell (ssh客户端&#xff09; ---------------------------------------------安全组----------防火墙-------黑白名单-----SSH服务 问题排查 1. 安全…

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 &#xff1a; 我们今天UI自动化设计的时候&#xff0c;通常会遵循一些设计模式&#xff0c;例如Page Object模式。但是自己找元素再去填写有一些麻烦&#xff0c;所以我们可以通过拆解录制的脚本&#xff0c;将其中的元素提取出来…

DALL-E、Stable Diffusion 等 20+ 图像生成模型综述

二、任务场景 2.1. 无条件生成 无条件生成是指生成模型在生成图像时不受任何额外条件或约束的影响。模型从学习的数据分布中生成图像&#xff0c;而不需要关注输入条件。 2.2. 有条件生成 有条件生成是指生成模型在生成图像时受到额外条件或上下文的影响。这些条件可以是类别…

Vscode 保存代码,代码自动格式化

我这里使用的插件是Prettier-Code formatter&#xff1a;自动缩进整理代码的格式&#xff0c;使用方法如下&#xff1a; 先在vscode商店找到插件并安装&#xff1a;安装插件之后&#xff0c;随便找到一个项目文件&#xff0c;右键选择格式化文档&#xff1a;选中我们安装的插件…

掌握Vim的会话之道:深度解析会话管理功能

掌握Vim的会话之道&#xff1a;深度解析会话管理功能 在高效的文本编辑工作流中&#xff0c;能够保存和恢复编辑会话是极其重要的。Vim&#xff0c;作为一个功能强大的文本编辑器&#xff0c;提供了会话管理功能&#xff0c;允许用户保存当前的工作状态&#xff0c;并在之后重…

spring6框架解析(by尚硅谷)

文章目录 spring61. 一些基本的概念、优势2. 入门案例实现maven聚合工程创建步骤分析实现过程 3. IoC&#xff08;Inversion of Control&#xff09;基于xml的bean环境搭建获取bean获取接口创建实现类依赖注入 setter注入 和 构造器注入原生方式的setter注入原生方式的构造器注…

Java 多线程stream流按行读取文件

stream并行流快&#xff08;文件11g&#xff09; try (Stream<String> lines Files.lines(filePath)) {lines.parallel().forEach(str -> operatePartData(str, allDataList)); } catch (IOException e) {throw new RuntimeException(e); }线程池慢&#xff08;文件…