打卡力扣题目三

news/2024/4/19 1:43:47/文章来源:https://blog.csdn.net/m0_49914128/article/details/132007999

 #左耳听风 ARST 打卡活动重启#

目录

 一、题目

 二、解题方法一

三、解题方法二 


关于 ARTS 的释义 —— 每周完成一个 ARTS:
● Algorithm: 每周至少做一个 LeetCode 的算法题
● Review: 阅读并点评至少一篇英文技术文章
● Tips: 学习至少一个技术技巧
● Share: 分享一篇有观点和思考的技术文章

希望通过此次活动能聚集一波热爱技术的人,延续好奇、探索、实践、分享的精神。
 


 一、题目

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

 二、解题方法一

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef addTwoNumbers(l1, l2):carry = 0p1 = l1p2 = l2ans = Nonewhile p1 or p2 or carry:v1 = p1.val if p1 else 0v2 = p2.val if p2 else 0total = v1 + v2 + carryif total >= 10:carry = 1total %= 10else:carry = 0node = ListNode(total)node.next = ansans = nodeif p1: p1 = p1.nextif p2: p2 = p2.nextreturn ans

其中,`ListNode` 是链表节点的类定义,包含一个值 `val` 和一个指向下一个节点的指针 `next`。`addTwoNumbers()` 函数接受两个链表 `l1` 和 `l2`,并返回它们的和表示的链表。在函数中,我们使用三个指针 `p1`、`p2` 和 `carry` 分别指向两个链表的当前节点和进位值。然后,我们循环遍历两个链表,每次将当前节点的值相加再加上进位值,得到一个新的总和。如果总和大于等于 10,则需要进位;否则不需要进位。最后,我们将新的总和封装成一个节点,并将其插入到结果链表的最前面。当遍历完两个链表后,返回结果链表即可。

 具体实现过程如下:

  1. 定义一个链表节点类 ListNode,包含一个值 val 和一个指向下一个节点的指针 next
  2. 定义函数 addTwoNumbers(l1, l2),其中 l1 和 l2 分别表示两个链表。
  3. 在函数中定义三个指针变量 p1p2 和 carry,分别指向两个链表的当前节点和进位值。初始时,p1 和 p2 分别指向两个链表的头节点,carry 初始化为 0。
  4. 进入循环,每次循环处理两个链表中的一个节点和一个进位值:
    • 首先,获取当前节点的值 v1 和进位值 v2,如果当前节点为空,则将其值设为 0。
    • 然后,计算新的总和 total,即 v1 + v2 + carry。如果总和大于等于 10,则需要进位;否则不需要进位。
    • 如果需要进位,则将 carry 置为 1,并将总和对 10 取余数,以保证结果不超过 9。
    • 否则,将 carry 置为 0。
    • 然后,创建一个新的节点 node,其值为 total,并将其插入到结果链表的最前面。同时更新指针变量 p1p2 和 ans,使其分别指向新插入的节点、原链表的下一个节点和当前节点所指向的节点。
  5. 当遍历完两个链表后,返回结果链表即可。

需要注意的是,这个算法的时间复杂度为 O(max(m, n)),其中 m 和 n 分别表示两个链表的长度。因为在最坏情况下,我们需要遍历较长的链表才能得到最终结果。

三、解题方法二 

除了使用哈希表来存储已经遍历过的元素及其对应的下标的方法,还可以使用迭代的方式来实现。

具体实现过程如下:

1. 定义一个函数 `addTwoNumbers(l1, l2)`,其中 `l1` 和 `l2` 分别表示两个链表。
2. 在函数中定义两个变量 `num1` 和 `num2`,分别表示第一个链表的当前节点所指向的数字和第二个链表的当前节点所指向的数字。初始时,`num1` 和 `num2` 都为 0。
3. 定义一个变量 `carry`,用于记录进位值。初始时,`carry` 为 0。
4. 进入循环,每次循环处理两个链表中的一个节点:
   * 首先,获取当前节点所指向的数字 `val`,如果当前节点为空,则将其值设为 0。
   * 然后,将 `num1` 加上 `val`,并将结果与 `num2` 相加,同时加上进位值 `carry`。如果相加的结果大于等于 10,则需要进位;否则不需要进位。
   * 如果需要进位,则将 `carry` 置为 1,并更新 `num1` 的值为相加结果对 10 取余数。
   * 否则,将 `carry` 置为 0,并更新 `num1` 的值为相加结果。
5. 当遍历完两个链表后,返回一个新的链表,其头节点为 `num1`,尾节点为空。

需要注意的是,这个算法的时间复杂度为 O(max(m, n)),其中 m 和 n 分别表示两个链表的长度。因为在最坏情况下,我们需要遍历较长的链表才能得到最终结果。

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef addTwoNumbers(l1, l2):num1, num2, carry = 0, 0, 0res = ListNode()p1 = l1p2 = l2while p1 or p2 or carry:val1 = p1.val if p1 else 0val2 = p2.val if p2 else 0total = val1 + val2 + carryif total >= 10:carry = 1total %= 10else:carry = 0node = ListNode(total)node.next = res.nextres.next = nodenum1 = val1num2 = val2p1 = p1.next if p1 else Nonep2 = p2.next if p2 else Nonereturn res.next

其中,ListNode 是链表节点的类定义,包含一个值 val 和一个指向下一个节点的指针 nextaddTwoNumbers() 函数接受两个链表 l1l2,并返回它们的和表示的链表。在函数中,我们使用三个变量 num1num2carry 分别表示第一个链表的当前节点所指向的数字、第二个链表的当前节点所指向的数字和进位值。初始时,num1num2carry 都为 0。然后,我们进入循环,每次循环处理两个链表中的一个节点和一个进位值:首先获取当前节点所指向的数字 val,如果当前节点为空,则将其值设为 0;然后将 num1 加上 val,并将结果与 num2 相加,同时加上进位值 carry;如果相加的结果大于等于 10,则需要进位;否则不需要进位;如果需要进位,则将 carry 置为 1,并更新 num1 的值为相加结果对 10 取余数;否则,将 carry 置为 0,并更新 num1 的值为相加结果。最后,将新节点插入到结果链表的最前面,并返回结果链表即可。

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

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

相关文章

成为一名黑客(网络安全),需要掌握哪些黑客技能?

前言 黑客技能是一项非常复杂和专业的技能,需要广泛的计算机知识和网络安全知识。你可以参考下面一些学习步骤,系统自学网络安全。 在学习之前,要给自己定一个目标或者思考一下要达到一个什么样的水平,是学完找工作(…

【面试题】与通义千问的芯片前端设计模拟面试归纳

这里是尼德兰的喵芯片设计相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏! 让我们一起为芯片前端全栈工程师而努力! 前言 两个小时,与chatGPT进行了一场数字IC前端设计岗的面试_尼德兰的喵的博客-CSDN博客 和GPT-3.5的回答可以对比品尝,味道更好。 模…

*CTF 2023 web jwt2struts 题解wp

jwt2struts 根据题目名字猜测,这题考察jwt和Struts2 包里面果然有一个cookie 验证了,是jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjI1MjgxfQ.F7vOtdqg48M1DYK4tVZywTipIYDqKfsBSju7ekLSecU 我们的目标应该是把user改…

Python(五十二)列表元素的判断及遍历

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

JavaScript学习 -- 对称加密算法DES

在现代的互联网时代,数据安全性备受关注。为了保护敏感数据的机密性,对称加密算法是一种常用的方法。在JavaScript中,DES(Data Encryption Standard)是一种常用的对称加密算法。本篇博客将为您展示如何在JavaScript中使…

代码、低代码、无代码开发触手可及的低代码平台源码

基于moleculer微服务架构开发的低代码平台源码,代码、低代码、无代码开发触手可及。 一、低代码平台系统功能 【公司信息】 管理员可通过页面顶部设置菜单或者应用程序中设置应用进入到后台设置页面。 在公司信息页面可进行基础信息修改,启用用户自助…

【机器学习】习题3.3Python编程实现对数几率回归

参考代码 结合自己的理解,添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt from sklearn import linear_model导入数据,进行数据处理和特征工程 # 1.数据处理&#x…

Java基础_网络编程

Java基础_网络编程 网络编程三要素InetAddress网络模型 UDP通信程序单播发送数据接收数据聊天室 组播广播 TCPTCP通信程序三次握手和四次挥手 来源Gitee地址 网络编程三要素 IP: 设备在网络中的地址,是唯一的标识端口号: 应用程序在设备中唯一的标识。协议: 数据在…

Python实现自动登录和下单脚本,代码嘚魅力~

目录标题 前言环境使用:代码实现思路配置浏览器驱动代码实现尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 学python对selenium应该不陌生吧 Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。 Selenium 支持的语言包括C#…

通过clone的方式,下载huggingface中的大模型(git lfs install)

1、如图:可以手动一个个文件下载,但是那样太慢了,此时,可以点击下图圈起来的地方。 2、点击【Clone repository】,在命令行中,输入【git lfs install】(安装了这个,才会下载大文件&a…

appium的基本使用

appium的基本使用 一、appium的基本使用appium环境安装1、安装Android SDK 2、安装Appium3、安装手机模拟器4、Pycharm安装 appium-python-alicent5、连接appium和模拟器6、Python代码调用appium软件,appium软件在通过adb命令调用android操作系统(模拟器…

LeetCode 刷题 数据结构 数组 485 最大连续1的个数

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.示例 2: 输入:nums […

基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

《向量数据库指南》:向量数据库Pinecone如何集成Elasticsearch

目录 上传嵌入模型 上传数据集 创建嵌入 将Elasticsearch索引移动到Pinecone 概要 是一个强大的开源搜索引擎和分析平台,广泛用作基于关键字的文本搜索的文档存储。 Pinecone是一个广泛用于生产应用程序的向量数据库,例如语义搜索、推荐系统和威胁检测,需要在数亿甚…

68. 文本左右对齐

题目链接:力扣 解题思路:遍历单词数组,确定每一行的单词数量, 之后就可以得到每一个需要补充的空格数量。从而得到单词之间需要补充的空格数量。具体算法如下: 确定每一行的单词数量 初始值: num 0&…

【MQTT5】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务

文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多,新手可以看下 《【MQTT】Esp32数据上传采集:最新mqtt插件(支…

用JavaScript和HTML实现聊天页面和功能(超详细)

文章目录 🚀一、介绍🚀二、开始编码🔎2.1 创建一个HTML文件🔎2.2 编写样式🔎2.3 完善聊天页面🔎2.4 编写按钮逻辑🔎2.5 测试聊天效果🔎2.6 优化对话显示🔎2.7 设置一个自…

SQL-每日一题【1070. 产品销售分析 III】

题目 销售表 Sales: 产品表 Product: 编写一个 SQL 查询,选出每个销售产品 第一年 销售的 产品 id、年份、数量 和 价格。 结果表中的条目可以按 任意顺序 排列。 查询结果格式如下例所示: 示例 1: 解题思路 前置知…

LLaMA:开放和高效的基础语言模型

Part1前言 我们介绍了LLaMA,这是一个参数范围从7B到65B的基础语言模型集合。我们在数以万亿计的标记上训练我们的模型,并表明有可能完全使用公开可用的数据集来训练最先进的模型,而不必求助于专有的和不可获取的数据集。特别是,L…

PDF.js实现搜索关键词高亮显示效果

在static\PDF\web\viewer.js找到定义setInitialView方法 大约是在1202行,不同的pdf.js版本不同 在方法体最后面添加如下代码: // 高亮显示关键词---------------------------------------- var keyword new URL(decodeURIComponent(location)).searchP…