【链表】Leetcode 2. 两数相加【中等】

两数相加

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

示例 1:
在这里插入图片描述
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

解题思路

  • 可以通过模拟手工相加的过程来实现两个逆序链表的相加。
  • 从链表的头部开始,对应位置的数字相加并考虑进位。

具体步骤

  • 1、初始化一个结果链表 dummyHead 和一个指针 current 指向 dummyHead。
  • 2、初始化进位 为 0。
  • 3、遍历两个链表,对应位置的数字相加并加上进位。
  • 4、将结果添加到新链表中,并更新进位。
  • 5、如果两个链表的长度不同,需要考虑短链表的高位是否需要进位。
  • 6、如果最后还有进位,需要在结果链表的最后添加一个新节点。
  • 7、返回结果链表的头部。

Java实现

public class AddTwoNumbers {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode dummyHead = new ListNode(0);ListNode current = dummyHead;int carry = 0;//进位值while (l1 != null || l2 != null) {int x = (l1 != null) ? l1.val : 0;int y = (l2 != null) ? l2.val : 0;int sum = x + y + carry;carry = sum / 10;current.next = new ListNode(sum % 10);if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;current = current.next;}if (carry > 0) {current.next = new ListNode(carry);}return dummyHead.next;}public static void main(String[] args) {// 构造链表 342: 2 -> 4 -> 3ListNode l1 = new ListNode(2);l1.next = new ListNode(4);l1.next.next = new ListNode(3);// 构造链表 465: 5 -> 6 -> 4ListNode l2 = new ListNode(5);l2.next = new ListNode(6);l2.next.next = new ListNode(4);// 调用 addTwoNumbers 方法相加链表AddTwoNumbers solution = new AddTwoNumbers();ListNode result = solution.addTwoNumbers(l1, l2);// 打印相加结果while (result != null) {System.out.print(result.val + " ");result = result.next;}// 输出:7 -> 0 -> 8}
}

时间空间复杂度

  • 时间复杂度:O(max(m, n)),其中 m 和 n 分别是两个链表的长度,需要遍历较长的链表。
  • 空间复杂度:O(max(m, n)),需要创建一个新的链表来存储相加后的结果。

java两个大数相加

实现思路类似,从末位逐位相加,进位

public class BigDecimalAdd {public static void main(String[] args) {String a = "13413";String b = "3333";System.out.println(add(a,b));}public static String add(String a, String b) {StringBuilder sb = new StringBuilder();int carry = 0;int i = a.length() - 1;int j = b.length() - 1;while (i >= 0 || j >= 0 || carry > 0) {int sum = carry;if (i >= 0) {//a.charAt(i--) 等价于 a.charAt(i)执行后,再执行i--;//a.charAt(i--) - '0' 数字的ASCII转化成对应数值sum += a.charAt(i--) - '0';}if (j >= 0) {sum += b.charAt(j--) - '0';}sb.append(sum % 10);carry = sum / 10;}return sb.reverse().toString();}}

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

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

相关文章

Redis数据结构对象中的对象共享、对象的空转时长

对象共享 概述 除了用于实现引用计数内存回收机制之外,对象的引用计数属性还带有对象共享的作用。 在Redis中,让多个键共享同一个值对象需要执行以下两个步骤: 1.将数据库键的值指针指向一个现有的值对象2.将被共享的值对象的引用计数增一 目前来说…

pytorch 实现线性回归(Pytorch 03)

一 从零实现线性回归 1.1 生成训练数据 原始 计算公式, 我们先使用该公式生成一批数据,然后使用 结果数据去计算 计算 w1, w2 和 b。 %matplotlib inline import random import torch from d2l import torch as d2ldef synthetic_data(w, b, num_ex…

敏捷开发最佳实践:质量维度实践案例之接口级自动化测试

本次分享我们将继续给大家带来全新的质量维度实践案例:接口级自动化测试。 本实践节选自《2022中国企业敏捷实践白皮书》,分享者为查俊,是来自腾讯的高级研发项目经理。 问题: 版本持续迭代,关键路径上的场景持续增…

C#面:简述 var 和 dynamic

var 关键字: var 关键字是在编译时进行类型推断的。也就是说,编译器会根据变量的初始化表达式来确定变量的类型,并在编译时将其替换为实际的类型。var 关键字只能用于局部变量,不能用于字段、方法参数或返回类型。var 关键字声明…

基于springboot+vue的餐饮管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

抖音商城小店电话采集使用教程

下面是一个简单的Python代码示例,用于抓取抖音商城小店的电话号码: import requests import jsondef get_phone_numbers(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3…

Java学习笔记21——使用JDBC访问MySQL数据库

JDBC(Java Database Connectivity,Java数据库连接)是应用程序编程借口(API),描述了一套访问关系数据库的标准Java类库。可以在程序中使用这些API,连接到关系数据库,执行SQL语句&…

IDEA Git恢复DropCommit删除的提交

刚刚Dorp commit了,本地代码也被删除了,如何恢复呢, 从项目中登录git,找到刚刚的commit代码,如下所示:输入命令git reflog 复制代码,到idea中,打开GIt,找到RESET HEAD, …

rust学习笔记(8-12)

8 集合 Rust 标准库中包含一系列被称为 集合(collections)的非常有用的数据结构。大部分其他数 据类型都代表一个特定的值,不过集合可以包含多个值。不同于内建的数组和元组类型,这些 集合指向的数据是储存在堆上的,这…

Redis:什么是redis?①

一、思想 Redis是一个开源的高性能基于内存key-value数据库,常用作数据库、缓存或消息代理 二、数据类型 String List

初始 Navicat BI 工具

早前,海外 LearnBI online 博主 Adam Finer 对 Navicat Charts Creator 这款 BI(商业智能)工具进行了真实的测评。今天,我们来看下他对 Navicat BI 工具的初始之感,希望这能给用户一些启发与建议。LearnBI online 作为…

《计算机考研精炼1000题》为你考研之路保驾护航

创作背景 在这个充满挑战与竞争的时代,每一位考生在备战研究生考试的过程中,都希望通过更多符合考纲要求的练习题来提高自己的知识和技能。为了满足这一需求,我们精心策划和编辑了这本《计算机考研精炼1000题》。在考研政治和考研数学领域&a…

springboot283图书商城管理系统

图书商城管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理…

耳机壳UV树脂制作私模定制耳塞需要什么样的设备和技术?

制作私模定制耳塞需要使用到一些特定的设备和技术,包括但不限于以下内容: 耳模制作工具:用于获取用户耳型的耳模制作工具,如硅胶、橡皮泥等。需要使用熟练的手法和技术,确保耳模的准确性和稳定性。UV树脂:…

社交变革:探索Facebook的魔力

社交媒体平台的崛起已经改变了我们与世界的交互方式,而Facebook作为其中的巨头,其影响力和魔力更是不可忽视。本文将深入探讨Facebook如何引领社交变革,并探索其背后的魔力所在。 连接世界的纽带 Facebook的独特之处在于它作为一个社交平台&…

CRON 定时任务

检测是否安装了 cron systemctl status crond 如果没有安装使用 sudo yum install cronie 编辑 crontab -e * * * * * php /path/your.php Esc键 然后输入 :q 退出 :wq 保存并退出 第一个 * 表示分钟,表示每分钟执行一次。第二个 * 表示小时,表示每…

PI+重复控制在逆变器控制中的应用

当前现状与困境 众说周知,电网是以工频周期跳变的交流电,具有天然的周期特性,当电网接入RLC不同负载时,电网的电压谐波也会呈现周期性的波动。此时对于光伏逆变器来说,工作环境是不太友好的,所以怎么去抑制…

「滚雪球学Java」:安全(章节汇总)

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!&#xf…

【视频异常检测】Diversity-Measurable Anomaly Detection 论文阅读

Diversity-Measurable Anomaly Detection 论文阅读 Abstract1. Introduction2. Related Work3. Diversity-Measurable Anomaly Detection3.1. The framework3.2. Information compression module3.3. Pyramid deformation module3.4. Foreground-background selection3.5. Trai…

JavaScript实现简单的表单验证

关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…