LeetCode算法题之2:Add Two Numbers

RAGFlow 离线部署:解决cl100k_base.tiktoken问题 摘要 本文详细解决了RAGFlow离线部署时tiktoken缓存文件下载失败的问题。通过分析tiktoken库的缓存机制,一次性不改代码解决. 阅读详情

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;
    }
}
Diffusion Models扩散模型与深度学习(数学原理和代码解读) ​ 此前GANs霸占各大顶会很多年,DDPM的出现让人耳目一新!经过这两年的发展,Diffusion Models能在图像生成、超分辨率重建、点云生成、语音生成等领域达到SOTA。这篇文章旨在帮助没有了解过的读者入门,《Diffusion Models与深度学习专栏》已经写了将近三十篇文章,既有原理公式和必备基础知识的讲解,也有代码详细实战解读,还有前沿热门应用,欢迎读者订阅。 阅读详情

相关推荐

三相SVPWM逆变器双闭环PI解耦控制:从dq坐标系到参数整定实战

本文深入解析了三相SVPWM逆变器的双闭环PI解耦控制技术。通过引入dq坐标系,将交流量转换为直流量,并结合前馈补偿实现电流环的解耦控制。文章详细阐述了从数学模型推导、控制器设计到参数整定与SVPWM实现的完整流程,为工程师提供了从理论到实战的系统性指导。

weixin_28292761的博客 403

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

汽车电子开发必看:AUTOSAR MCAL层SPI驱动配置全解析(基于EB tresos)

本文深入解析了AUTOSAR MCAL层SPI驱动的核心配置,基于EB tresos工具详细阐述了通道、外部设备、作业与序列等关键概念。重点剖析了多设备共享总线时的资源管理与实时性调优策略,特别是SpiJobPriority参数的决定性影响,并提供了常见配置陷阱的实战排查指南,旨在帮助汽车电子工程师高效完成SPI驱动配置。

weixin_29188043的博客 292

【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

软件可靠性设计

本文系统介绍了软件可靠性设计与建模的理论框架和实施方法。首先从可靠性定义、核心思想和与建模的关系等理论基础出发,重点阐述了模块化设计、冗余容错、异常处理等六类可靠性设计方法及其技术栈。文章详细分析了可靠性设计在软件生命周期各阶段的应用,并深入探讨了设计与建模的深度结合机制,包括参数影响、验证方法和量化指标。最后提出了覆盖设计、开发、测试和运行四个阶段的落地策略,形成完整的"设计-建模-运行"流程体系。全文强调通过预防性设计和量化建模相结合的方法提升软件系统的可靠性和稳定性。

moton2017的博客 896

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 135

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

用Excel或WPS做两独立样本的T检验

一般情况下收集数据时常用的是Excel或者WPS,但统计时却用SPSS等软件进行统计学分析,经常很多人找不到SPSS的安装包,或者苦于正版激活或忘记教程,其实Excel或WPS自带函数就足够了,均数、标准差以及统计检验都是一个函数而已。解释:先做F检验,如果F>0.05就做T检验,Ttset里的数据为两组的数据的比较,结果如下。A组的均数计算 =AVERAGE(B2:B6)A组的标准差计算 =STDEV(B2:B6)B组的标准差计算=STDEV(B7:B19)分组 数值 A组均数 A组标准差 p值。

Mrrunsen的博客 6752

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

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

kkill_youokk_的博客 879

Python与.NET革命性互操作:PythonNet实现零门槛双向调用——深度解析与实战案例

跨语言调用实战指南:Python与.NET深度集成 摘要:本文详解Python与.NET双向互调技术,通过PythonNet和Python.Runtime实现高效跨语言协作。核心优势包括:无缝集成Python机器学习模块(如PaddleOCR)与.NET UI框架,内存直传提升90%数据效率,减少80%重复代码。内容涵盖:1)Python调用.NET类库的完整流程;2)C#动态加载Python脚本及环境配置要点;3)反射机制实现私有方法调用与泛型处理;4)性能优化技巧(类型缓存、NumPy数组转换);5)异

墨夶的博客 611

十.镜头知识之畸变问题

对于理想光学系统,在一对共轭的物像平面上,像的放大率是一个常数。但是对于实际的光学系统,当视场较大或很大时,像的放大率就要随视场而异,这样就会使像相对于物体失去相似性。这种使像变形的成像缺陷称为畸变。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2124

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

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

weixin_47426299的博客 452

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

leetcode Add Two Numbers

最近一直在忙实验室项目的事情,好久没写代码了,手太生了,所以去leetcode官网随便找了两个简单题刷了一下,第一个一遍就通过了,第二个还是有点问题。感觉这种东西就得多练。不然会一直退步退步,下面是我写的两个题的解法,仅供参考:(先写一题吧下一题之后补上) Add Two  Numbers //C/C++解法 /**  * Definition for singly-linked

yaojianpengshr的博客 658
上一篇: 解决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、付费专栏及课程。

余额充值