(java)leetcode-445 Add Two Numbers II(两数相加 II)

2023-10-30

题目描述

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

示例:

输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7

思路1:翻转链表

这题是leetcode-2 Add Two Numbers(两数相加)的延伸,该题的处理顺序是从低位到高位进行相加操作,这样的好处是,对于进位的处理比较方便,因为进位本来就是从低位向高位的。这题的难点也就在于从高位向低位如何处理。

其实题目也进行了提示,我们可以先对输入链表进行翻转,那么就能转化为leetcode-2 Add Two Numbers(两数相加),又变成从低位到高位处理了。最后只需要把结果链表再进行一次翻转就是正确答案了。

代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    	if (l1 == null && l2 == null) return null;
    	l1 = reverseList(l1);
    	l2 = reverseList(l2);

    	return reverseList(addTwoList(l1,l2));
    }

    private ListNode addTwoList(ListNode l1, ListNode l2) {
    	ListNode newHead = new ListNode(0);
    	ListNode cur = newHead;
    	// 进位
    	int carry = 0;
 		while(l1 != null || l2 != null || carry > 0) {
        	int sum = carry;
        	// 短的链表补0
            sum += l1 == null ? 0 : l1.val;
            sum += l2 == null ? 0 : l2.val;
            
            cur.next = new ListNode(sum % 10);

            cur = cur.next;
            if(l1 != null)
                l1 = l1.next;
            if(l2 != null)
                l2 = l2.next;

            // 进位
            carry = sum / 10;
        }
    	return newHead.next;

    }

    // 翻转链表并返回翻转后的头节点
    private ListNode reverseList(ListNode head) {
    	if (head == null || head.next == null) return head;
    	ListNode tail = null;
    	while(head != null) {
    		ListNode temp = head.next;
    		head.next = tail;
    		tail = head;
    		head = temp;
    	}
    	return tail;
    }
}

执行用时:3 ms, 在所有 Java 提交中击败了89.75%的用户
内存消耗:39.7 MB, 在所有 Java 提交中击败了95.83%的用户

思路2:栈

题目给了提示,也给了挑战——这题可以不需要翻转就能处理。
不翻转怎么进行逆序处理呢?自然就能想到使用了——栈总是与逆序息息相关。
我们先把输入链表存入两个栈中,那么出栈顺序就是原来的倒序了,如此一来,又实现了从低位往高位处理。

代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        // 将L1入栈
        while (l1 != null) {
            stack1.push(l1.val);
            l1 = l1.next;
        }
        // 将L2入栈
        while (l2 != null) {
            stack2.push(l2.val);
            l2 = l2.next;
        }
        
        int carry = 0;
        ListNode head = null;

        while (!stack1.isEmpty() || !stack2.isEmpty() || carry > 0) {
            int sum = carry;
            sum += stack1.isEmpty()? 0: stack1.pop();
            sum += stack2.isEmpty()? 0: stack2.pop();
            ListNode node = new ListNode(sum % 10);
            node.next = head;
            head = node;
            carry = sum / 10;
        }
        return head;
    }
}

执行用时:
5 ms, 在所有 Java 提交中击败了65.19%的用户
内存消耗:40 MB, 在所有 Java 提交中击败了95.83%的用户

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(java)leetcode-445 Add Two Numbers II(两数相加 II) 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • 列表应该如何转换为具体的实现?

    假设我正在使用一个我不知道源代码的库 它有一个返回列表的方法 如下所示 public List
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 逃离的正确方法是什么?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBCPreparedStatement 中的字符?

    以下查询在 Oracle 12c 中是正确的 SELECT FROM dual MATCH RECOGNIZE MEASURES a dummy AS dummy PATTERN a DEFINE a AS 1 1 但它不能通过 JDBC
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • Nextjs 的 App Router 路由模式核心概念简介

    Nextjs App Router 简介 Next js 13 引入了新的应用路由器 它建立在服务端组件之上 支持布局 嵌套路由 加载状态 错误处理等等 本文将介绍 App Router 新路由模型的基本概念 术语 树 Tree 一种用于可
  • neo4j--Cypher语法练习(LOAD CSV)

    1 21 LOAD CSV LOAD CSV用于从CSV文件中导入数据 CSV文件的URL可以由FROM后面紧跟的任意表达式来指定 需要使用AS来为CSV数据指定一个变量 LOAD CSV支持以gzip Deflate和ZIP压缩的资源 C
  • el-form表单回车提交,浏览器会刷新页面

    当el from 只有一个输入框时候 回车提交表单 刷新页面 原因 由于当表单只有一文本框时 按下回车将会触发表单的提交事件 从而导致页面刷新 解决办法 在 el from 加上 submit native prevent
  • 【经典】华为远程机试题分享(跟进)

    在上一篇博客中有说到面试的具体事儿 昨晚那种方法做出来之后 感觉可读性不好 也就是一般情况下很难看懂代码 所以接近睡着时我又想到一个办法比较简单 而且易懂 所以写这篇博客和大家分享一下吧 具体就围绕下图这个核心问题来做 其实我的想法很简单
  • 【Espruino】NO.18 使用L298N驱动直流电机

    http blog csdn net qwert1213131 article details 38584743 本文属于个人理解 能力有限 纰漏在所难免 还望指正 小鱼有点电 Espruino中文社区 小学时代玩过玩具四驱车 各种奇葩霸气
  • ChatGPT写小论文

    ChatGPT写小论文 只是个人对写小论文心得 从知乎 知网自己总结的 有问题 可以留个言我改一下 别删我的东西啊CSDN 文章目录 ChatGPT写小论文 1 写小论文模仿实战 狗头 0 小论文组成 1 好论文前提 2 标题 3 摘要 4
  • Transformer(三)--论文实现:transformer pytorch 代码实现

    转载请注明出处 https blog csdn net nocml article details 124489562 本系列传送门 Transformer 一 论文翻译 Attention Is All You Need 中文版 Tran
  • games101笔记 Shading

    什么是shading 不同的物体应用不同的材质的过程 就是计算出物体具体应该在的地方 物体的光照 物体本身应该有的材质 Blinn Phong Reflectance Model Blinn Phong反射模型 Blinn Phong Re
  • MySql执行顺序及执行计划

    一 mySql的执行顺序 mysql执行sql的顺序从 From 开始 以下是执行的顺序流程 1 FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积 生成Temp1 2 JOIN
  • Spring和springMVC启动流程

    首先Spring是建立在Servlet容器之上的 所有web工程的初始位置都是在web xml文件中 它配置了servlet的上下文 context 和监听器 listener spring的启动过程其实就是ioc的启动过程 1 首先初始化
  • linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置

    如果ping域名的时候出现ping unknown host xxx xxx 但是ping IP地址的时候可以通的话 可知是dns服务器没有配置好 查看一下配置文件 etc resolv conf 里面是否有nameserver xxx x
  • 算力和硬件的关系_算力就是生产力:中国AI算力占全球三成

    12月15日 IDC与浪潮集团联合发布了 2020 2021中国人工智能计算力发展评估报告 报告从旨在评估中国人工智能发展的现状 为推动产业AI化发展提供极具价值的参考依据和行动建议 据报告显示 预计2020 年中国AI市场规模将达到 62
  • chatgpt(0)-pycharm-vscode安装使用插件Codeium-bito

    1 pycharm codeium 下载插件 codeium 登录 一直出现 Log In Codeium Free AI Code Completion Chat 2 pycharm bito 3 vscode bito 下载安装 注册登
  • 十六进制加法

    十六进制加法逢16进1位 注意 进位的那个位是 和 16 举例 0x21 0x3F 60 而不是 0x21 0x3F 6F
  • Proguard混淆工具使用方法图文说明

    Proguard的理论知识请看这篇文章 http www cnblogs com cr330326 p 5534915 html 1 下载Proguard 官网地址 http proguard sourceforge net 不墙很难打开
  • Sonar代码质量管理

    一 简介 1 1 什么是Sonar Sonar是一个用于代码质量管理的开源平台 用于管理代码的质量 是一个Web系统 展现了静态代码扫描的结果 通过插件形式可以支持二十几种语言的代码质量检测 通过多个维度的检查了快速定位代码中潜在的或者明显
  • fopen 参数'rb' 与'rb+'引发的黑色血案

    目录 一 背景 二 代码说明 1 下面是出错的代码 2 如何变正常的 三 问题分析 1 关于rb与rb 的区别 2 关于fread的两种形式说明 3 原因分析 一 背景 为了把windows上的算法库移植到linux上 文件读写部分去掉了C
  • IO流(异常的处理)

    IO流 概述 IO流 又叫输入输出流 当我们将内存中的数据写到硬盘上时 这个过程叫输出流 Output 当我们将硬盘上的数据读取到内存中时 叫做输入流 Input 流本身是一个抽象概念 是 对数据传输的总称 也就是说 数据在设备键的传输 叫
  • 跟李沐学AI之注意力机制+transformer

    注意力机制 注意力提示 注意力的可视化 注意力汇聚 平均汇聚 非参数注意力汇聚 带参数注意力汇聚 注意力评分函数 掩蔽softmax操作 加性注意力 缩放点积注意力 Bahdanau注意力 多头注意力机制 自注意力和位置编码 transfo
  • (java)leetcode-445 Add Two Numbers II(两数相加 II)

    题目描述 给你两个 非空 链表来代表两个非负整数 数字最高位位于链表开始位置 它们的每个节点只存储一位数字 将这两数相加会返回一个新的链表 你可以假设除了数字 0 之外 这两个数字都不会以零开头 进阶 如果输入链表不能修改该如何处理 换句话