LeetCode.2-两个数字相加(Add Two Numbers)

海康相机MV_CC_SetIntValue七类报错根因与现场解决方案 在工业视觉系统中,相机参数配置接口(如SetIntValue)并非简单函数调用,而是涉及设备连接态、协议层状态机、功能模块使能、参数约束校验等多层协同的复杂交互。其典型错误(如-1002、-1011)往往源于状态不一致或隐式依赖,而非代码逻辑错误。理解参数名大小写敏感性、数值步进约束(nInc)、工作模式冲突(如触发/自由运行)、SDK与固件版本兼容性等底层机制,是实现稳定产线部署的关键。本文聚焦海康MV SDK中MV_CC_SetIntValue接口的七类高频现场报错,结合物理层链路、驱动协议层状态、应用 阅读详情

这是悦乐书的第340次更新,第364篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Medium级别的第1题(顺位题号是2)。给定两个非空链表,表示两个非负整数。 数字以相反的顺序存储,每个节点包含一个数字。将两个数字相加并将其作为链表返回。你可以假设这两个数字不包含任何前导零,除了数字0本身。例如:

输入:(2 -> 4 -> 3)+(5 -> 6 -> 4)
输出:7 -> 0 -> 8
说明:342 + 465 = 807。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

计算链表的节点值之和,包含以下两种情况:

  • 进位。两个节点值相加大于等于10后,会产生进位问题,需要将进位产生的数加到下一轮计算上去。如果是在最后一次计算产生进位,结果链表需要增加一个next节点。

  • 两链表的长度不相等时,可能会有一个链表先遍历完节点,而另外一个还剩下许多节点没遍历,因此在遍历的循环条件处,判空是或的关系,直到两个链表的节点都遍历完,才结束循环。

在此解法中,我们使用一个新的链表(头节点值为0)作为结果链表,使用一个boolean类型的变量flag来当做是否有进位的标志。

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode result = new ListNode(0);
    ListNode tem = l1;
    ListNode tem2 = l2;
    ListNode current = result;
    boolean flag = false;
    while (tem != null || tem2 != null) {
        // 计算节点值之和,需要判空
        int sum = (tem != null ? tem.val : 0) + 
                (tem2 != null ? tem2.val : 0);
        // 有进位,节点值之和加1,flag变为false
        if (flag) {
            sum += 1;
            flag = false;
        }
        // 节点值之和大于等于10,只保留个位数,flag变为true
        if (sum >= 10) {
            sum -= 10;
            flag = true;
        }
        current.next = new ListNode(sum);
        current = current.next;
        if (tem != null) {
            tem = tem.next;
        }
        if (tem2 != null) {
            tem2 = tem2.next;
        }
    }
    // 尾节点可能因进位而产生
    if (flag) {
        current.next = new ListNode(1);
    }
    return result.next;
}

03 第二种解法

思路和上面一样,只是将计算进位换了一种方式来实现,采用了取余和整除的方式来实现。

public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
    ListNode result = new ListNode(0);
    ListNode temp = result;
    int count = 0;
    while (l1 != null || l2 != null) {
        int sum = (l1 == null ? 0 : l1.val) +
                (l2 == null ? 0 : l2.val);
        sum += count;
        count = sum/10;
        temp.next = new ListNode(sum%10);
        temp = temp.next;
        if (l1 != null) {
            l1 = l1.next;
        }
        if (l2 != null) {
            l2 = l2.next;
        }
    }
    if (count > 0) {
        temp.next = new ListNode(count);
    }
    return result.next;
}

04 第三种解法

使用递归。

public ListNode addTwoNumbers3(ListNode l1, ListNode l2) {
    ListNode result = new ListNode(0);
    helper(result, l1, l2, 0);
    return result.next;
}

/**
 * 递归方法
 * @param result 结果链表
 * @param l1
 * @param l2
 * @param carry 进位产生的数
 */
public void helper(ListNode result, ListNode l1, ListNode l2, int carry) {
    if (l1 == null && l2 == null) {
        return ;
    }
    int sum = (l1 == null ? 0 : l1.val) +
            (l2 == null ? 0 : l2.val);
    sum += carry;
    carry = sum/10;
    result.next = new ListNode(sum%10);
    result = result.next;
    if (l1 != null) {
        l1 = l1.next;
    }
    if (l2 != null) {
        l2 = l2.next;
    }
    if (l1 == null && l2 == null && carry > 0) {
        result.next = new ListNode(carry);
    }
    helper(result, l1, l2, carry);
}

05 第四种解法

对上面的递归方法,我们还可以再简化下,不借助额外的递归方法,以此方法本身做递归。

public ListNode addTwoNumbers4(ListNode l1, ListNode l2) {
    if (l1 == null && l2 == null) {
        return null;
    }
    int val = (l1 == null ? 0 : l1.val) +
            (l2 == null ? 0 : l2.val);
    ListNode result = new ListNode(val%10);
    result.next = addTwoNumbers4(l1 == null ? null : l1.next, 
            l2 == null ? null : l2.next);
    if (val >= 10) {
        result.next = addTwoNumbers4(result.next, new ListNode(1));
    }
    return result;
}

06 小结

算法专题目前已连续日更超过六个月,算法题文章209+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

ST-Link使用教程 关于使用ST-Link烧录.hex文件教程。以及报错解决!适合刷ARM,使用STM32的教程! 阅读详情

相关推荐

TekTronix 高速信号完整性基础以及测试方法分析

如果信号速率比较高,则CTLE与FFE都无法满足要求,尤其是大于10G,比如USB3.1Gen2 10Gbps,PCIe4.0 16Gbps,这些场合都会采用DFE均衡,DFE的优点是,它既可以识别当前比特,并且可以判决前面的n个比特(Tap的阶数越高,看到的前面的比特数越多),根据前面比特的变化来计算出要处理当前比特所要变化的幅度,来补偿由于前面比特变化所引起的信号幅度的变化。10G以下,一般都不太关心这个串扰,高于10G的信号,会发现相互之间的串扰越来越明显,已经成为引起误码的重要的原因之一。

weixin_45365488的博客 4141

javaweb使用ecplise工具,案例:两数相加,若结果为正调转,正结果页面,否则反之

一、结果图: 1、结果为正: 2、结果为负: 二、结构图(jsp文件,创建动态工程,在WebContent目录下创建jsp): 三、代码: input.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l

weixin_44727274的博客 573

libero烧录信号抓取

提示:如果改了东西需要重新烧录,需要把这两个界面都关闭再libero打开。两个红色的要关闭掉。然后返回libero开始烧录,观测信号(如果只烧录观测从这一步开始就行)等到下面的messige出现以下信息表示run好了。在下图中右侧可以自己设置,设置完之后记得保存一下。run一下,耐心等待,有警告就ok,run完之后。run成功会变绿色,然后点下面的这个看波形。设置抓取信号:在libero打开。打开的就是烧录界面,直接run。

qq_34047965的博客 1420

【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]

记录、总结 1504

论文阅读 Quantum Convolutional neural network

在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。

m0_54373077的博客 2000

稚晖君Dummy机械臂CAN总线控制详解:从代码到实战(附常见问题排查)

本文深入解析了稚晖君Dummy机械臂的CAN总线控制技术,从协议设计到代码实现,详细介绍了CAN总线在机械臂控制中的核心价值、通信协议栈设计、运动控制指令实现及常见问题排查方法。通过实战案例和代码示例,帮助开发者快速掌握机械臂CAN总线控制的关键技术。

uuu88的博客 295

Java之 从键盘输入两个数字,求和

import java.util.Scanner; public class test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入第一个数据"); int i1 = scanner.nextInt(); System.out.println("输入第二个数据");.

xuanzihhh的博客 5223

HFSS学习笔记——Vivaldi天线仿真(一)

Vivaldi 天线HFSS仿真,HFSS中指数曲线绘制及曲面绘制。

and_future的博客 1万+

求两整数和(C)

#include&amp;lt;stdio.h&amp;gt; int main() { int a,b,sum; a=123; b=456; sum=a+b; printf(“sum is %d\n”,sum); return 0; }

自学吧 1315

汽车零部件产线实战:C#上位机+YOLO实现螺栓装配到位视觉检测

本项目基于C#上位机+YOLOv8实现汽车零部件产线螺栓装配到位视觉检测,全程贴合产线实际场景,从硬件选型、安装调试,到模型训练、上位机开发,再到项目联调、优化扩展,均提供手把手实操指导,代码可直接复制使用,规避了工业视觉产线检测的高频踩坑点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1330

云计算 | 期末梳理(上)

2024云计算回忆版 && 复盘向梳理

知识库搭建ing 2231

[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 and return i...

qq_43502142的博客 356

机器学习实战7-基于机器学习算法预测相亲成功率

大家好,我是微学AI,今天给大家介绍一下机器学习实战7-基于机器学习算法预测相亲成功率,随着社会的发展,大家都忙于事业,对自己的终身大事就耽搁了,相亲是一种传统的寻找伴侣的方式,随着时代的发展,相亲的方式也在不断地改变。在这个过程中,了解相亲双方的信息以及预测相亲是否成功变得越来越重要。本文将介绍如何使用随机森林算法对相亲成功进行预测,通过分析男女双方的房子、车子、长相、家庭条件、父母情况、生活习惯、学历、性格、兴趣等因素,来预测相亲是否成功。

微学AI的博客 3033

[LeetCode] 2. Add Two Numbers 两个数字相加

You are given twonon-emptylinked lists representing two non-negative integers. The digits are stored inreverse orderand each of their nodes contain a single digit. Add the two numbers and return i...

Fabio的博客 239

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[LeetCode] 2.两个数字相加(Add Two Numbers)C++代码实现

1,题目描述 You are given twonon-emptylinked lists representing two non-negative integers. The digits are stored inreverse orderand each of their nodes contain a single digit. Add the two numbers and ...

博客 272

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)

鄙人不才,故收录LeetCode中的解法和代码。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ cla

主要记录嵌入式学习与开发过程。 1641

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode-2. Add Two Numbers(链表实现数字相加)

1.题目描述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 ret

476

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. ...

ccystewart的博客 167

LeetCode-2. Add Two Numbers

刚刚我经历了可能是2017年3月22号的最大的大起大落。

public Blog myBlog(){ 1125

LeetCode 2. Add Two Numbers (两数列相加)

No.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...

Dby_freedom的博客 305

leetcode_2. Add Two Numbers 求单链表表示的两个数相加的和,也用单链表表示(数字全部倒序表示)

class Solution(object): def addTwoNumbers(self, l1, l2): “”" :type l1: ListNode :type l2: ListNode :rtype: ListNode “”" if l1 == None and l2 == None : return "It's empty!" carry = 0 ...

qqzj_bupt的博客 299

[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 retur...

Deephome的博客 206

LeetCode Add Two Numbers两个链表数值相加

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. 相当于无限加了,就是用了链表来存储数据。 本题就是考对链表的操作和模拟加法。 第一种方法: 这个跟合并两个有序链表成一个有序链表的程序结构是一样的。

靖空间 2217
上一篇: LeetCode.888-公平的糖果交换(Fair Candy Swap)
下一篇: LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值