【leetcode刷题】2.两数相加——Java版

字符串模拟大数相加——Java实现 public static String add(String str1, String str2) { //处理特殊情况 if(str1 == null || str1.equals("")){ return str2; } if(str2 == null || str2.equals("")){ return str1; } StringBuilder sb1. 阅读详情

老实人想先把两个链表转成整型加起来再转回去,结果被[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]教做人了。      ——leetcode此题热评

题目: 

难度:中等

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

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

你可以假设除了数字 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
  • 题目数据保证列表表示的数字不含前导零

Related Topics

  • 递归
  • 链表

Solution 

看到这个题第一眼我是懵的,链表多年不用已经忘光。无奈翻开以前的笔记,话说我三年前可真牛逼。

看完其实链表也就那么回事。众所周知,链表就像个链子,把各个节点串起来,这里学过c语言指针的就很容易理解。话不多说,上图:

每个node只存当前value和下一个节点next,下一个节点又存着下一个节点的value和下下一个节点next。有点绕哈,有没有想到什么,这不就是我们常说的递归吗?

也可以称之为俄罗斯套娃

回到问题,简单来说就是在算加法,我们只需要各个位相加,在考虑进位就可以了。(/)(%)

 那么数组可以通过下标获得值,链表没有下表,所以需要我们定义一个指针。

  • 将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0,比如 987 + 23 = 987 + 023 = 1010
  • 每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值
  • 如果两个链表全部遍历完毕后,进位值为 1,则在新链表最前方添加节点 1
  • 小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。 使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。 

Code

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur=pre;     //地址传递
        int up=0;
        while(l1!=null||l2!=null){
            int x=l1==null?0:l1.val;
            int y=l2==null?0:l2.val;
            int sum=x+y+up;
            up=sum/10;
            sum=sum%10;
 
            cur.next=new ListNode(sum);
            cur=cur.next;
 
            if(l1!=null){
                l1=l1.next;
            }
            if (l2!=null){
                l2=l2.next;
            }
        }
        if (up==1){
            cur.next=new ListNode(up);
        }
        return pre.next;
    }
}

注意理解上文中的地址传递,可百度。传送门

Result

复杂度分析

  • 时间复杂度:O(mn) ,其中 m,n 为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1) 的时间。
  • 空间复杂度:O(N)+1 。答案链表的长度最多为较长链表的长度 +1。

2024.10.22虾皮笔试题解 给定两个整数数组nums1和nums2,要求找出它们的交集,并返回一个数组,数组中的元素应是这两个数组的交集中不重复的元素,且按照从小到大的顺序排列。 阅读详情

相关推荐

【2024-04-29】虾皮春招笔试三道编程题解

恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。作者@TechGuide【全网同名】

试问道几许 1088

Java算法题:两数之和

LeetCode原题: 给你一个下标从 1 开始的整数数组numbers ,该数组已按 非递减顺序排列,请你从数组中找出满足相加之和等于目标数target 的两个数。 示例 1: 输入:numbers = [2,7,11,15], target = 9 输出:[1,2] 解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。 方法一:暴力遍历 我们使用双层for循环 代码如下: public class Test { ...

qq_52772299的博客 6821

Fluent 2.5D动网格重构实战:涡旋压缩机复杂运动模拟指南

本文详细解析了Fluent 2.5D动网格重构技术在涡旋压缩机复杂运动模拟中的应用。通过对比传统方法,2.5D重构显著提升了计算效率和稳定性,特别适用于柱体类几何的网格处理。文章提供了从基础配置到参数优化的实战指南,包括关键设置步骤、常见问题排查及性能优化策略,帮助工程师有效解决动网格重构中的负体积和网格畸变问题。

weixin_28455801的博客 549

两数相加

两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 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

weixin_43014149的博客 993

Cube.js 安装避坑指南:从零到一键启动

本文是一份详细的Cube.js安装避坑指南,旨在帮助开发者从零开始顺利启动Cube.js。文章重点强调了安装前的环境准备,包括Node.js版本、包管理工具和项目路径等关键“地基”,并深入解析了使用npx安装的优势、数据库类型选择以及数据库连接配置的核心步骤与常见陷阱,确保您能高效完成安装并成功启动服务。

weixin_29218509的博客 429

超实用!用 Ollama + DeepSeek + Dify 搭建本地知识库,提升企业效率

本文介绍了如何使用 Ollama + DeepSeek + Dify 搭建本地知识库,帮助企业高效管理信息。通过简单配置,可实现智能问答、文档检索等功能,提升效率并保障数据安全。

Happiness is everywhere 4294

大厂社招3年-力扣热点高频刷题记录(已更新100+道热点题)

前言: 最近从在大厂出来看机会,大厂面试基本都考察算法,于是维护此文档,一是查缺补漏,确保整体热点算法题目的应知应会,与思路的灵活理解;二是分享出来给其他同学朋友做一个参考借鉴,共同学习成长 目前刷题方向侧重于各大厂热点题,以及力扣的Hot 100 此笔记持续更新。 文章目录一、菜单未分类树栈回溯二分双指针双指针DP贪心二、刷题记录1. 两数相加——哈希——一刷2. 两数相加——链表——二刷3. 无重复字符的最长子串——滑动窗口——三刷5.最长回文串——数组11. 盛水最多的容器——双指针——二刷15. 三

weixin_43899069的博客 3670

加权均值向量算法(INFO)详解:从数学原理到智能算法

本文系统介绍了加权均值向量算法(INFO)的理论基础、数学模型与实现应用。该算法基于加权均值数学概念,通过MeanRule规则平衡探索与开发能力,具有结构新颖、参数合理的特点。核心内容包括:1) 算法理论基础,阐述加权均值数学定义与小波函数权重计算;2) 算法原理,详细解析更新规则、向量组合和局部搜索三阶段数学模型;3) 实现方法,提供MATLAB代码关键参数解析;4) 改进方向,介绍INFO-KELM混合模型等变体;5) 应用案例,涵盖函数优化、工程设计与机器学习领域。

qq_42212808的博客 233

【leetcode刷题】60.字符串相加——Java版

字符串问题1

公号:一条coding 1万+

上下双相机定位贴合(原理到应用,halcon源码详解)

上下双相机定位贴合(原理到应用,halcon源码详解) 一、简介(类型与之前的文章)看你们理解那个文章快 主要讲解上下双相机定位贴合的原理和实现过程,包括各种标定、组合使用及具体的halcon源码实现,适用于的X、Y、Z三轴加一旋转轴系统,如模组组成的多轴系统、Scara四轴机器、六轴机器人(在运行过程中保证几个自由度不动,运行即可) 二、标定介绍 这一小节总结了通用的相机和轴的相对位置模型,并对其标定进行详细讲解 本系统仅使用了九点标定,精度可做到0.05mm 九点标定作用: A、本质就是仿射变换,一个坐

苏州程序大白的博客 9973

【24E】SWT6652 wifi驱动加载失败问题分析及解决方案

修改驱动配置Kconfig。是由于内存分配失败导致。

wgl307293845的博客 219

力扣热题100实战 | 第2期:两数相加——链表的“竖式加法”,你真的会处理进位吗?

本文是力扣热题100实战系列的第二篇,深度解析两数相加这道经典链表题。作为LeetCode第2题,它不仅是链表操作的基础训练,更是面试中高频出现的必考题。题目给出两个逆序存储的链表,要求模拟竖式加法逐位相加,并正确处理进位这一核心难点。本文从暴力思路(转数字相加)的陷阱讲起,逐步引导出模拟加法的正确解法,并提供三种实现版本(基础版、优化版、递归版),帮助读者建立链表同步遍历的思维框架。

LinuxSRE、k8s、运维、DBA、大数据 378

华为OD机试双机位C卷-流浪地球(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷【流浪地球】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【流浪地球】。

qq_45776114的博客 3139

leetcode2——两数相加——java实现

题目要求: 在这里: 1.定义一个dummyHead来表示一个新节点,最初时新链表所指向的就是dummyHead; 2.然后用p指向第一个链表l1,q指向第二个链表l2; 3.定义一个进位,其值为1或0; 4.令p所指向的值为x,q所指向的值为y,再将两者进行相加放入新链表中: 如果有进位,则令carry = 1,再令p和q分别指向链表中的下一个节点; 如果没有进位,则令carry = 0,再令...

阿花的IT历程 329

ollama如何在自己的服务器上跑Qwen3(小白必看)

在国内下载ollama最新安装包时,使用curl -fsSL https://ollama.com/install.sh | sh命令可能会遇到网络问题导致下载进度停滞。为了解决这一问题,可以通过国内的镜像源进行下载,例如使用modelscope社区提供的最新ollama镜像仓库。具体步骤包括:首先通过pip install modelscope安装modelscope,然后使用modelscope download命令下载ollama-linux镜像,接着进入下载目录并赋予安装脚本执行权限,最后运行安装脚

Ven%的博客 756

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

两数相加——力扣

两数相加——力扣。## 执行用时: **1 ms, 在所有 Java 提交中击败了100.00% 的用户** ## 内存消耗: **41.3 MB, 在所有 Java 提交中击败了76.16% 的用户**

zzz的博客 221

IDEA的使用指南

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

咸鱼干的LeetCode刷题目录——Python&Java解题

小白刷LeetCode的日常,代码都是ac过的,有参考一些大佬的题解,如有侵权,请联系博主删除。 LeetCode部分 LeetCode_01_Two Sum——Dic&Hash LeetCode_2_两数相加——进位标记 LeetCode_153_154_寻找旋转排序数组中的最小值——二分查找 LeetCode_941_有效的山脉数组——线性查找 LeetCode_1207_独一无二的出现次数——Dic&Map 剑指Offer部分 剑指 Offer_03_数组中重复的数字——Dic&a.

程序猿进化梯 385

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

两数相加——LeetCode(解题过程略显艰辛且奇葩)

题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. /** * Definition for singly-linked list. * public class ListNode {

weixin_58494755的博客 243

【LeetHOT100】两数相加——Java多解法详解

方法时间复杂度空间复杂度是否利用逆序存储溢出风险面试推荐度迭代模拟✅无⭐⭐⭐⭐⭐递归模拟✅无⭐⭐⭐⭐转整数法不可行不可行✅严重❌。

Mr_pyx的博客 324

2. 两数相加

题目: 2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:...

dev_zyx的博客 404

LeetCode454.四数相加——java语言

题目描述: 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k, l < n nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0 示例 1: 输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2] 输出:2 解释: 两个元组如下: (0, 0, 0, 1)

m0_51799816的博客 485

力扣454-四数相加——HashMap法

力扣454-四数相加——HashMap法

你好,时光的博客 328

415. 字符串相加——【Leetcode每日一题】

415. 字符串相加 给定两个字符串形式的非负整数 `num1` 和 `num2` ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 `BigInteger`), 也不能直接将输入的字符串转换为整数形式。

weixin_43412762的博客 657

Rust踩雷笔记(5)——刷点链表的题(涉及智能指针Box,持续更新)

rust链表+智能指针的刷题记录,持续更新

umbrellalalalala的博客 1694

【LeetCode】两整数之和

不使用运算符 + 和 - ,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = 3 输出: 1 import java.lang.reflect.Array; import java.util.*; public class Main { public stat...

QiuBika_061的博客 180
上一篇: 【leetcode刷题】1.两数之和——Java版
下一篇: 【leetcode刷题】3.最长不重复子串——Java版
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值