LeetCode算法题之2:Add Two Numbers

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据 阅读详情

LeetCode之2:Add Two Numbers

问题描述:


将两个个位数数字组成的链表合并为一个,模拟加法器。

问题的陷阱:

在考虑进位问题时想的不全名,漏掉两个链表最终同时为空,而产生进位,导致最终少加一位数这一问题。

缺陷代码分析

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int adding = 0;
        ListNode head = new ListNode(0);
        ListNode current = head;
        while(l1!=null || l2!= null) {
            current.next = new ListNode(0);
            current = current.next;
            int sum = adding + (l1==null ? 0 : l1.val) + (l2==null ? 0 : l2.val);
            if (sum >= 10)
                adding = 1;
            else
                adding = 0;
            current.val = sum % 10;
            l1 = l1==null ? null : l1.next;
            l2 = l2==null ? null : l2.next;
            if (l1==null && l2==null && adding==1) {
                current.next = new ListNode(1);
                current = current.next;
            }
        }
        return head.next;
    }
}

主要思路是在while 循环中不断将两个链表的值相加,保存到新的链表节点中,直到两个链表均为空。

  1. 在while中有很多重复操作:假如一个链表比另一个长得多,那么对于其中的空链表就有了很多不必要的判断其是否为空的操作,拉低了执行时间。
  2. 在开头就可以尝试判断其中是否有链表为空,直接将另一个非空链表返回。
  3. 最终一个链表为空时,可以直接转化为对另一个非空链表的操作,提高效率。

改进后的版本:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int adding = 0;
        if(l1==null)
            return l2;
        if(l2==null)
            return l1;
        ListNode head = new ListNode(0);
        ListNode current = head;
        while(l1!=null && l2!= null) {
            current.next = new ListNode(0);
            current = current.next;
            int sum = adding + l1.val + l2.val;
            if (sum >= 10)
                adding = 1;
            else
                adding = 0;
            current.val = sum % 10;
            l1 = l1.next;
            l2 = l2.next;
        }
        if (l1==null && l2==null && adding==1) {
                current.next = new ListNode(1);
                current = current.next;
        }
        while (l1!=null) {
            int sum = (l1.val+adding);
            current.next = new ListNode(sum%10);
            adding = sum>=10 ? 1 : 0;
            current = current.next;
            l1 = l1.next;
            if (l1==null && adding==1) {
                current.next = new ListNode(1);
                current = current.next;
            }
                
        }
        
        while (l2!=null) {
            current.next = new ListNode((l2.val+adding)%10);
            adding = (l2.val + adding) >= 10 ? 1 : 0;
            current = current.next;
            l2 = l2.next;
            if (l2==null && adding==1) {
                current.next = new ListNode(1);
                current = current.next;
            }
        }    
        return head.next;
    }
}
vue支付项目-APP支付宝支付功能 如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。 阅读详情

相关推荐

大开眼界的十大开源人工智能项目

这是一个强大的开源工具,能让你在不同框架之间自由切换,无需重写代码。它是一个开源工具,能用简单的SQL语言同时处理数据和AI模型,让一切变得有序而高效。Rasa是我开发智能聊天机器人时的首选,它让你轻松掌控机器人对话的每个细节。我经常用它快速验证模型在不同框架下的表现,省去了大量烦躁的调试过程。最近发现的Vapi是一个以API方式提供的语音AI工具,开发者友好程度超乎想象。KNIME是一个以拖拽方式构建数据分析流程的开源工具,仿佛是数据界的乐高积木。它像个忠诚的守门员,确保你的模型始终健康运行。

wjianwei666的专栏 1105

leetcode算法—两数相加 Add Two Numbers

题目 You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do

Andya_net的博客 437

大模型应用开发面试全流程实录:RAG、上下文工程与多Agent协作技术深度解析

Transformer 依靠多头自注意力和位置编码实现高效序列建模。Prompt Engineering包含多种设计思路,如 Zero-shot、Few-shot、Chain-of-thought,提升模型泛化和推理。Token 和上下文窗口直接影响模型性能与成本,选择需结合实际业务场景(如客服对话需长窗口)。Embedding 技术是 RAG 的基础,决定了语义检索效果。向量数据库如 FAISS、Milvus等分别适用于本地/分布式检索。

m0_52114506的博客 828

【Leetcode】2. 两数相加(Add Two Numbers)

No2. 两数相加(Add Two Numbers) 题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807 示例 2 输入:l1 = [0], l2 = [0] 输出:[0] 示例 3

Xiao_Spring的博客 749

到底是什么决定了二极管的最高工作频率?

硬件工程师,应该都用过二极管的吧,不过也许有一个误区,大多数人可能并不知道,或者说是理解有问题,下面就来细细说下。 一个问题 先提一个问题:到底是什么决定了二极管的最高工作频率? 估计有不少人会回答是二极管反向恢复时间Trr,也有人会说是二极管结电容,那到底谁是对的呢?或者说都一样,反向恢复时间由结电容决定? 到底什么决定了二极管的最高工作频率,我们暂且不论,不过需要知道的是,二极管的反向恢复时间和结电容根本就是两回事,反向恢复时间绝不能等同于结电容的充放电时间。 为什么我这么说呢?.

weixin_42005993的博客 4832

RK3588开发笔记-麦克风阵列多pdm通道合并成一个声卡

在音频设备的开发中,特别是在多通道音频数据处理场景中,如何将多个PDM(Pulse Density Modulation)通道整合成一个声卡设备,是一个非常具有挑战性的问题。RK3588芯片作为一款性能强大的平台,提供了对多个音频通道的支持。本文将介绍如何在RK3588上将多个PDM通道合并成一个麦克风阵列声卡,从而在Linux系统下统一管理和使用,提高多通道音频的同步性。在本文中我们主要介绍使用2通道回采+4通道mic声音采集构成一个6通道声卡,加以回声消除实现一个多麦克风阵列。

flypig has a dream! 1926

leetcode 两数相加

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

qq_22684941的博客 183

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

weixin_45735391的博客 6万+

LeetCode2.AddTwoNumbers两数相加(Java可运行,带测试用例)

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

kkill_youokk_的博客 879

PoE 的三大国际标准:PoE、PoE+、PoE++

很多人知道 PoE 能“一根网线,既供电又传数据”,但鲜少有人能说清楚:PoE 供电到底分几种标准?差别有多大?哪些设备要用 PoE,哪些必须上 PoE+ 或 PoE++?今天,我们就来一次彻底的“拆解”,把 PoE 的三大国际标准——讲得明明白白,顺便也帮你厘清网络工程中的常见“供电疑惑”。

网络技术联盟站 1548

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4054

leetcode 2 _add_two_numbers_summary 解题思路,关于Python里值和引用传递的小笔记

特性tuplelist可变性❌ 不可变✅ 可变是否可当 dict key✅ 可以❌ 不可以是否共享引用✅ 是(但不能改内容)✅ 是(并且能改内容)是否可以修改内容❌ 不能✅ 可以用途建议返回多值、配置常量、固定结构等临时数据、动态数组等Python 中,变量是名字,传的是对象的引用;可变对象能直接改内容(list),不可变对象(tuple、int)改不了内容,只能重新绑定变量名。

weixin_47426299的博客 452

Python数据分析全流程指南:从数据采集到可视化呈现的实战解析

在数字化转型浪潮中,数据分析已成为企业决策的核心驱动力。Python凭借其丰富的生态库和简洁的语法,成为数据分析师的首选工具。本文将以实战案例为脉络,拆解数据分析全流程的关键环节,通过具体代码和场景说明如何用Python完成从数据采集到可视化呈现的完整链路。

这家伙很懒,什么都没有留下 1681

【LeetCode】算法题2 Add Two Numbers的归纳

原题链接 题目: You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbe

Jojo 309

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode算法题2:Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linke

tianmingxin1991的博客 195

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python写算法题:leetcode: 2. Add Two Numbers

https://leetcode.com/problems/add-two-numbers/#/description # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next =

485

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode 2. Add Two Numbers--C++,Python解法--面试算法题

LeetCode 2. Add Two Numbers–字节跳动面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专栏里,大部分题目C++和Python的解法都有。 题目地址:Add Two Numbers - LeetCode You are given two non-empty linked lists r...

个人博客 424

leetcode-2. Add Two Numbers简单的java链表算法题 面试碰到了吗?

Question: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it

beloveddarling的博客 587

python中给定一个正整数,依次输出它的各位数

python中给定一个正整数,依次输出它的各位数步骤:应用于leetcode: *Add Two Numbers* 步骤: 1. 将当前正整数除以10,得到商和余数 2. 余数为当前正整数的个位数 3. 令商为当前正整数 4. 将当前正整数继续除以10,得到商和余数 5. 返回第二步,重复2,3,4直至得到的商为0 6. 将得到的余数依次输出,即为正整数各位数的反向输出 ...

王九思的博客 1万+

LeetCode //C - 445. Add Two Numbers II

【代码】LeetCode //C - 445. Add Two Numbers II。

Made in Code 1897

Leetcode[2] Add Two Numbers and Leetcode[445] Add Two Numbers II

Leetcode[2] Add Two Numbers class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ ...

只为分享 252

JS斩杀LeetCode(2):Add Two Numbers

题目: You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers a

清风的博客 2225

LeetCode 2.Add Two Numbers 两数相加 Python3 三种解法

LeetCode 2.Add Two Numbers 两数相加 Python3 由于做提前连链表是怎么实现的都不知道所以补了点课。 Single Linked List 代码来自这位兄台 pasilo https://blog.51cto.com/13047263/2070815 内容理解我看的知乎 如何更好的理解链表 以下代码和LeetCode上面的链表稍微有些许不同,那个里面链表和链表上面的节...

Aixoum is Me 1290

Leetcode 2 Add Two Numbers

Leetcode 2 Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add t...

博学 笃志 切问 近思 197

LeetCode 2. Add Two Numbers(C++)

使用了O(1)的额外空间,思路是将两个链表遍历并合并,合并过程中不断计算进位,如果计算到最后一次加法仍有进位(可能是两个链表对应位置值相加产生进位或者上一次的进位加本次值又产生进位),那么需要加一个值为1的新结点。 这种思路的优点是空间复杂度小,缺点是实现比较复杂(跟借助一个额外的数组和链表相比)。 /** * Definition for singly-linked list. * st

赞美月亮的专栏 1435

2. Add Two Numbers

2. Add Two Numbers Medium 59971568Share You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single...

Joy 650
上一篇: 解决git@github.com: Permission denied (publickey).问题
下一篇: LeetCode算法题之3:Longest Substring Without Repeating Characters
耐利
博客等级 码龄12年 188粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值