两数相加 - (LeetCode)

前言

今天无意间看到LeetCode的一道“两数相加”的算法题,第一次接触链表ListNode,ListNode结构如下:

public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;}}

算法题目

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

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

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

解题思路

使用迭代的方法来实现链表的相加。从两个链表的头节点开始,依次将对应位置的数字相加,并保留进位。在遍历完两个链表的所有节点之后,如果还存在进位,就需要在结果链表中追加一个节点来存储进位。

第一版代码

/*** 两数相加*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {StringBuilder s = new StringBuilder();while (l1 != null) {s.append(l1.val);l1 = l1.next;}StringBuilder s1 = new StringBuilder();for (int i = s.toString().length(); i > 0; i--) {s1.append(s.toString().charAt(i - 1));}long x1 = Long.parseLong(s1.toString());s = new StringBuilder();while (l2 != null) {s.append(l2.val);l2 = l2.next;}s1 = new StringBuilder();for (int i = s.toString().length(); i > 0; i--) {s1.append(s.toString().charAt(i - 1));}long x2 = Long.parseLong(s1.toString());long sum = x1 + x2;//结果倒序s1 = new StringBuilder();for (int i = String.valueOf(sum).length(); i > 0; i--) {s1.append(String.valueOf(sum).charAt(i - 1));}//返回链表ListNode listNode = new ListNode(Integer.parseInt(s1.substring(0, 1)));ListNode p = listNode;//声明一个变量在移动过程中充当节点for (int i = 1; i < s1.toString().length(); i++) {p.next = new ListNode(Integer.parseInt(s1.substring(i, i + 1)));    //创建链表的下一个节点,并赋值p = p.next;    //将指针的位置指向当前节点}return listNode;}

注意:万万没有想到,在LeetCode通过测试,但是提交的时候,却被一个长链表被给卡主了,查看了错误,发现是超出了long的长度,不能用传统的方法来解决,只能通过每一位数的相加,然后进位进行循环计算和进位处理。

经过思考和优化,最后优化代码如下,顺利提交LeetCode通过所有的测试用例。

最终实现代码

/*** 两数相加*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode ln = l1;ListNode lx = l2;StringBuilder res = new StringBuilder();int val = 0;while (ln != null || lx != null) {int x = (ln != null) ? ln.val : 0;int y = (lx != null) ? lx.val : 0;int sum = x + y + val;if (sum >= 10) {//大于10res.append(sum % 10);//下一次运算+Nval = sum / 10;} else {//小于10res.append(sum);//清空进位val = 0;}//下一个ln = ln != null ? ln.next : null;lx = lx != null ? lx.next : null;}if (val > 0) {//结果有进位res.append(val);}//返回链表ListNode listNode = new ListNode(Integer.parseInt(res.substring(0, 1)));ListNode p = listNode;//声明一个变量在移动过程中充当节点for (int i = 1; i < res.toString().length(); i++) {p.next = new ListNode(Integer.parseInt(res.substring(i, i + 1)));//创建链表的下一个节点,并赋值p = p.next;    //将指针的位置指向当前节点}return listNode;}

📚学习永无止境,每天进步一点点,向知识的海洋更深处探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用openssl生成自签名证书

使用openssl生成自签名证书 1. 交互式生成2. 一步生成参考 1. 交互式生成 自签名 SSL 证书的生成涉及一个简单的 3 步过程&#xff1a; 步骤 1&#xff1a;创建服务器私钥 openssl genrsa -out cert.key 2048步骤 2&#xff1a;创建证书签名请求 (CSR) openssl req -new -k…

Sectigo SSL证书申请的流程是怎样的?

在当今数字化时代&#xff0c;网络安全成为了一个不可忽视的问题。为了保护网站和用户数据的安全&#xff0c;SSL证书成为了网站运营的重要组成部分。Sectigo作为全球领先的数字证书颁发机构之一&#xff0c;提供了一系列的证书解决方案来满足不同类型网站的需求。以下是对Sect…

2024年算法建模与计算机通信国际学术会议(ICAMCC 2024)

2024年算法建模与计算机通信国际学术会议(ICAMCC 2024) 2024 International Conference on Algorithm Modeling and Computer Communication(ICAMCC 2024) 会议简介&#xff1a; 2024年算法建模与计算机通信国际学术会议(ICAMCC 2024)将于中国南昌市盛大开幕。这次会议的目的是…

IP应用场景查询API接口

IP应用场景查询API接口指的是输入IP地址&#xff0c;查询IP应用场景信息。那么IP地址应用场景查询接口如何对接呢&#xff1f; 首先我们找到一家有IP地址应用场景查询API的服务商数脉API,然后注册账号&#xff0c;购买免费套餐 接下来就需要技术同学把IP应用场景查询接口对接到…

数学符号大全

目录 高数数学符号 科研论文常见数学符号极其含义 圆中间有个点代表点乘 高数数学符号 高数数学符号and数学运算符号及含义 - 知乎 科研论文常见数学符号极其含义 科研中论文常见数学符号及其含义&#xff08;科研必备&#xff0c;建议收藏&#xff09;_数学论文中的:-CSDN…

python GUI库 EEL + VUE.js 开发环境配置 联调

eel开发环境启动的服务器默认端口是8000&#xff0c;如果前端界面的开发也是直接在EEL开发环境中进行&#xff0c;一切好办。但如果前端用vue&#xff0c;则需要另外启动专用的vue开发环境的服务器&#xff08;Vue CLI (npm run serve)默认端口是8080&#xff0c;Vite (npm run…

CentOS7中如何docker-compose

在 CentOS 7 上安装 docker-compose 需要几个步骤 步骤 1: 安装 Docker 首先&#xff0c;确保你已经安装了 Docker。如果没有安装&#xff0c;可以通过以下命令安装&#xff1a; sudo yum update -y sudo yum install -y yum-utils sudo yum-config-manager --add-repo http…

攻防世界(CTF)~web-supersqli(详细解题思路)

题目介绍 题目描述“随便注” 先看一下是否存在注入 判断闭合方式 输入1’ and 11-- -正常回显 输入1and 12-- -无回显,确认是单引号闭合 看一下列数 输入1 order by 2-- - 有回显 输入1 order by 3-- - 报错&#xff0c;由此判断两列 使用union联合注入发现select被过滤了&a…

WMS仓储管理系统如何让仓库管理有过程

在当今竞争激烈的商业环境中&#xff0c;WMS仓储管理系统的智能化与过程化管理显得尤为重要。一个具有过程管理的WMS仓储管理系统不仅能够帮助企业实时监控、分析和调度仓库作业&#xff0c;还能显著提升作业效率和成本控制能力。下面&#xff0c;我们就来深入探讨一下这种“有…

流媒体zlmediakit

目标&#xff1a; 流媒体部署 内容&#xff1a; 使用开源流媒体zlmediakit docker搭建&#xff1a; docker run -d -p 10000:10000 -p 10000:10000/udp -p 1935:1935 -p 8080:80 -p 8554:554 -p 8443:443 -p 8000:8000/udp -p 9000:9000/udp -p 30000-30050:30000-30050…

IT Tools

vs & vscode工具 Vs Extensions & Remote Development Vs Extensions Remote-SSH VSCode远程连接到Linux并实现免密码登录 Git Graph C cppreference.com cplusplus 镜像站点 用于下载 QT, Ubuntu, 清华镜像站点 CMake Download Documents Cmake 构建QT …

IO系列(三) - 文件读写操作介绍

一、摘要 在之前的文章中&#xff0c;我们了解到在 Java I/O 体系中&#xff0c;File 类是唯一代表磁盘文件本身的对象。 File 类定义了一些与平台无关的方法来操作文件&#xff0c;包括检查一个文件是否存在、创建、删除文件、重命名文件、判断文件的读写权限是否存在、设置…

揿针在医保上叫什么?

点击文末领取揿针的视频教程跟直播讲解 创新型皮内针&#xff08;揿针&#xff09;——医保甲类产品 皮内针&#xff08;揿针&#xff09;技术属于重点推广的中医适宜技术&#xff0c;是将特制的小型针具固定于腧穴部位的皮内或皮下做较长时间留针的一种方法&#xff0c;称“…

2024年 C++音视频开发学习路线(ffmpeg/rtsp/srs/webrtc/hls)

在音视频工作领域&#xff0c;很多人可能会陷入徘徊和迷茫的境地。音视频的知识纷繁复杂&#xff0c;自己学习非常困难&#xff0c;既需要非常扎实的基础知识&#xff0c;又需要有很多的工程经验&#xff1b;不知道如何学&#xff0c;怎样才能查漏补缺自己的技术短板。 对于音…

QT C++ widget layout 嵌套 例子2

在上篇文章中描述了实中套虚&#xff08;用setLayout&#xff09;&#xff0c;虚中套实&#xff08;用addWidget&#xff09;。 本文再加1条&#xff0c;虚中套虚&#xff08;用addLayout&#xff09;。 所谓虚中套虚&#xff0c;是layout 套 layout 。 另外用循环代码生成从…

记录接口请求偶发504 Gateway Time-out问题

项目场景&#xff1a; 我们将服务部署到A公司服务器中&#xff0c;使用了共五台服务器&#xff0c;分别是&#xff1a;1.NG服务器 2.日志服务器 3.缓存服务器 4.应用服务器1 5.应用服务器2 。而请求过来首先到达的是他们的物理代理服务器&#xff0c;然后再转发请求到我们的ng…

【Neo4jJDK开箱即用的安装全流程】

neo4j:命令行本地访问loclhost neo4j:命令行本地访问loclhost2 neo4j操作 Neo4j桌面版数据库导出导入 Neo4j安装与配置以及JDK安装与配置教程&#xff08;超详细&#xff09; Neo4j 安装、使用教程 Neo4j安装教程 Neo4J桌面版的配置和连接Pycharm jdk-neo对应版本 JDK ORACLE中…

数据结构(四)————二叉树和堆(中)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、堆的概念及结构二、堆的实现三.堆的应用 总结 前言 CSDN 这篇博客介绍了二叉树中的基本概念和存储结构&#xff0c;接下来我们将运用这些结构来实现二叉树 一、堆的概念及结构 1…

招聘公司要求跳槽时间间隔不能太短,我的简历不符合要求,怎么办?

很多招聘公司要求就很奇葩,什么三五原则,什么二一原则,意思就是,你几年内,不能在超过几家公司内任职。你就说多奇葩啊,他们都不能保证自己的员工在自己公司干多久,甚至裁掉刚干了半年的员工,也是他们干出来的事,然后他们还好意思有这种奇葩要求。 目录 1 虚假的双向选…

OpenPCDet算法的网络结构及工作原理

OpenPCDet是一个用于三维点云目标检测的开源算法库。它提供了完整的目标检测流程&#xff0c;包括数据预处理、网络模型、损失函数、后处理等。OpenPCDet基于PyTorch框架实现&#xff0c;并针对点云数据进行了深度优化&#xff0c;以实现高效的目标检测和定位。 OpenPCDet的目…