Leetcode_2两数相加

文章目录

  • 前言
  • 一、两数相加
    • 1.1 问题描述
    • 1.2 解法一:分别将链表转为数字,然后相加
    • 1.3 代码实现
    • 1.4 解法二:分别将对应位置数字相加
    • 1.5 代码实现
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据

前言

链表是一种物理内存非连续存储,非顺序的线性数据结构,其有一系列节点组成,每个节点由两个部份组成:数据域和指针域。

相比数组,链表的优势表现为:

  • 可以动态分配内存空间,不用事先开辟,较为灵活,空间利用率高。
  • 插入删除效率高,只需要改变引用即可,时间复杂度O(1)。

劣势:

  • 查找效率低,从链表的头部遍历到查询数据元素的位置,时间复杂度O(n)。

一、两数相加

/*** 链表定义*/
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; }
}

1.1 问题描述

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

请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 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
  • 题目数据保证列表表示的数字不含前导零

1.2 解法一:分别将链表转为数字,然后相加

分别循环操作取出链表中的数值,并乘上对应的位数,再计算两个链表数值相加,最后处理两个相加之后的链表。

时间复杂度:需要遍历较长的链表O(n + m)
空间复杂度:需要创建新的链表O(max(n,m))

1.3 代码实现

/*** leetcode_2两数相加_暴力解法* @param l1* @param l2* @return*/
public ListNode addTwoNumbers_2_violence(ListNode l1, ListNode l2) {//循环计算l1链表的值int digit1 = 0;int v1 = 0;while (l1 != null) {//链表数值所对应的位数0-个位 1-十位....int pow = (int)Math.pow(10, digit1);v1 += l1.val * pow;digit1++;//指向下一个节点l1 = l1.next;}//循环计算l2链表的值int digit2 = 0;int v2 = 0;while (l2 != null) {int pow = (int)Math.pow(10, digit2);v2 += l2.val * pow;digit2++;l2 = l2.next;}//创建头节点ListNode head = new ListNode(0);//当前节点curr指向头节点ListNode curr = head;//计算l1 和 l2的和int sum = v1 + v2;if (sum == 0) {return head;}//处理两个相加之后的链表while (sum > 0) {int i = sum % 10;curr.next = new ListNode(i);curr = curr.next;//移除低位sum = sum / 10;}return head.next;
}

1.4 解法二:分别将对应位置数字相加

遍历两个链表,对应位置的节点数值相加,将结果插入新的节点尾部,大于10则进位,将进位添加到下一个节点。

边界问题:

  • 两个链表的边界 next == null

细节问题:

  • 两个链表长度不一致,短链表高位视为0
  • 链表最高位发生进位,结果链表需要新增一个节点存放进位数字

时间复杂度:需要遍历较长的链表O(n)
空间复杂度:需要创建新的链表O(n)

1.5 代码实现

/*** leetcode_2两数相加* @param l1* @param l2* @return*/
public ListNode addTwoNumbers_2(ListNode l1, ListNode l2) {ListNode p = l1;ListNode q = l2;ListNode head = new ListNode(-1);ListNode curr = head;int carry = 0;while (p != null || q != null) {int v1 = p != null ? p.val : 0;int v2 = q != null ? q.val : 0;int sum = v1 + v2 + carry;carry = sum / 10;int num = sum % 10;curr.next = new ListNode(num);curr = curr.next;if (p.next != null) {p = p.next;}if (q.next != null) {q = q.next;}}//处理进位问题if (carry != 0) {curr.next = new ListNode(carry);}return head.next;
}

二、使用步骤

1.引入库

2.读入数据

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

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

相关文章

golang 和java对比的优劣势

Golang&#xff08;或称Go&#xff09;和Java都是非常流行的编程语言&#xff0c;被广泛应用于各种领域的软件开发。尽管它们都是高级编程语言&#xff0c;但它们具有许多不同的特性和适用场景。本文将重点比较Golang和Java&#xff0c;探讨它们的优势和劣势。 性能方面&#…

Django之关系模型的序列化

一、关系模型的序列化-多查1 1.1、模型准备 from django.db import models# Create your models here. class Classes(models.Model):name = models.CharField(max_length=20, verbose_name=班级)class Student(models.Model):SEX_CHOICES = ((1,男)), (2, 女)name = models.C…

Python:百度AI开放平台——OCR图像文字识别应用

一、注册百度AI开放平台 使用百度AI服务的步骤为&#xff1a; 注册&#xff1a;注册成为百度AI开放平台开发者&#xff1b;创建AI应用&#xff1a;在百度API开放平台上创建相关类型的的AI应用&#xff0c;获得AppID、API Key和Secret Key&#xff1b;调用API&#xff1a;调用…

Mac删除软件,动一动手指,几秒就彻底删除 mac删除软件删不掉的解决方法 mac删除软件后怎么删除软件数据

当你入职新公司&#xff0c;接手前任员工使用的Mac电脑时&#xff0c;很可能会遇到一个非常普遍的问题&#xff1a;电脑中装有大量你不需要的软件。这些软件不仅占用宝贵的硬盘空间&#xff0c;还可能影响电脑的运行速度和效率。为了获得一个干净、清爽的使用体验&#xff0c;删…

Spark-Scala语言实战(12)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的join,rightOuterJoin,leftOuterJoin三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢…

小林coding图解计算机网络|基础篇01|TCP/IP网络模型有哪几层?

小林coding网站通道&#xff1a;入口 本篇文章摘抄应付面试的重点内容&#xff0c;详细内容还请移步&#xff1a; 文章目录 应用层(Application Layer)传输层(Transport Layer)TCP段(TCP Segment) 网络层(Internet Layer)IP协议的寻址能力IP协议的路由能力 数据链路层(Link Lay…

Redis 主从复制,哨兵模式,集群

目录 主从复制 主从复制 作用 缺陷 主从复制流程 实现Redis主从复制 哨兵模式 主从复制切换的缺点 哨兵的核心功能 哨兵模式原理 哨兵模式的作用 哨兵结构组成 故障转移机制 主节点的选举 实现哨兵模式 集群(Cluster) redis群集有三种模式&#xff0c;主从复制…

【Linux】网络基础常识{OSI七层模型/ TCP/IP / 端口号 /各种协议}

文章目录 1.网络常识1.0DHCP协议1. 1IP地址/MAC地址/ARP协议是什么&#xff1f;IP/MACARP&#xff1a;IP ⇒ MAC 1.2手机连接wifi的原理 SSID与BSSID手机连接wifiSSID与BSSID 1.3手机如何通过“数据/流量”上网&#xff1f;1.4电脑连接wifi的原理&#xff1f;电脑通过热点上网…

SystemHelper已停止运行解决方案

当手机一开机就提醒 SystemHelper已停止运行&#xff0c;但手机也能正常使用就是部分软件打不开怎么办&#xff1f; 有此提示说明你的系统已经 Root 了并且你安装了某些不知名的软件或者 Magisk 模块导致系统环境发生了不可逆的修改&#xff0c;有 Magisk 建议还原官方 Boot 启…

快速入门Linux,Linux岗位有哪些?(一)

文章目录 Linux与Linux运维操作系统&#xff1f;操作系统图解 认识LinuxLinux受欢迎的原因什么是Linux运维Linux运维岗位Linux运维岗位职责Linux运维架构师岗位职责Linux运维职业发展路线计算机硬件分类运维人员的三大核心职责 运维人员工作&#xff08;服务器&#xff09;什么…

3.6k star, 免费开源跨平台的数据库管理工具 dbgate

3.6k star, 免费开源跨平台的数据库管理工具 dbgate 分类 开源分享 项目名: dbgate -- 免费开源跨平台的数据库管理工具 Github 开源地址&#xff1a; GitHub - dbgate/dbgate: Database manager for MySQL, PostgreSQL, SQL Server, MongoDB, SQLite and others. Runs under…

CVE-2021-30517:Type confusion bug in LoadSuperIC

前言 这个漏洞是一个比较老的洞&#xff0c;之所以分析这个漏洞&#xff0c;只要是想再学习一下 ICs 相关的知识。并该漏洞的利用是利用与 String/Function 之间的混淆&#xff0c;比较有意思。 环境搭建 sudo apt install python git checkout 7d5e5f6c62c3f38acee12dc4114…

vue快速入门(五)v-show与v-if

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-if与v-show底层的区别v-if与v-show的效果 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

【OpenCV】图像像素的遍历

1 前言 介绍两种遍历像素的方法&#xff08;非指针、指针&#xff09;。注意&#xff1a;.at() .ptr()的作用、用法。相关API&#xff1a; Mat对象.ptr() Mat对象.at() 2 代码及内容 #include "iostream" #include "opencv2/opencv.hpp"using namespac…

vue3表单参数校验+正则表达式

这里我们要实现在form表单中对表单项添加参数校验。 校验要求 我们的表单中有用户名、密码、电话号码、邮箱这四个项。 我们设置用户名为3到20位的非空字符 密码为3到25位非空字符 电话号码就用目前用的电话号码正则表达式&#xff0c;要求手机号码以 1 开头&#xff0c;第…

Plonky2.5:在Plonky2中验证Plonky3 proof

1. 引言 Plonky2.5为QED Protocol团队主导的项目&#xff0c;定位为&#xff1a; 在Plonky2 SNARK中验证Plonky3 STARK proof。 从而实现Plonky系列的递归证明。 开源代码实现见&#xff1a; https://github.com/QEDProtocol/plonky2.5https://github.com/Plonky3/Plonky3&a…

BoostCompass —— 搜索引擎

文章目录 一、项目简介二、Boost库简介1. 简介2. Boost 库的特点 三、项目主要模块1. 网页内容获取&#xff0c;数据预处理模块2. 建立正排索引和倒排索引&#xff0c;项目核心模块3. 编写 http_server 模块&#xff0c;进行网络开放 四、项目功能预览1. 项目文件预览2. 项目执…

如何保证Redis的缓存和数据库中的数据的一致性?

Redis的缓存如何和数据库中的数据保持一致性&#xff1f; 我们都知道&#xff0c;Redis是一个基于内存的键值存储系统&#xff0c;数据完全存放在内存中&#xff0c;这使得它的读写速度远超传统的硬盘存储数据库。对于高访问频率、低修改率的数据&#xff0c;通过将它们缓存在…

第23章-OSPF基础

1. RIP协议的问题 2. OSPF概述 3. OSPF初始化流程 4. OSPF报文类型 5. OSPF分区域管理 1. RIP协议的问题 1&#xff09;问题1 设计粗糙 2&#xff09;问题2 环路问题&#xff1a;会产生环路 跳数限制&#xff1a;最大跳数受限&#xff0c;无法大规模组网 广播方式&#xff1a;广…

设计模式总结-抽象工厂模式

抽象工厂模式 模式动机模式定义模式结构模式分析模式实例与解析实例一&#xff1a;电器工厂 模式动机 在工厂方法模式中具体工厂负责生产具体的产品&#xff0c;每一个具体工厂对应一种具体产品&#xff0c;工厂方法也具有唯一性&#xff0c;一般情况下&#xff0c;一个具体工…