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

在这里插入图片描述

用链表代表2个数字,这2个数字相加的和用链表返回。
最高位在链表的head.

思路:

1.链表逆序

数字相加是从低位到高位的,然而链表中的数字是从高位指向低位。
所以涉及到链表的逆序。

逆序之后只需从head到tail把两个链表的数字相加,再用一个int表示进位。

链表的逆序:
最左边的数字逆序后应该是tail, 它的next指向null.
后面的数字每次都指向它的前一个数字。
所以用cur表示当前node, cur.next指向它前一个node,
然后cur移动到链表的下一节点,不停地把cur.next指向前一个node.

在把结果的数字一个一个地保存进结果的链表中时,
不断地把新数字指向前一个数字,就实现了从低位到高位保存的效果。

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode newHead = null;int carry = 0;l1 = reverseList(l1);l2 = reverseList(l2);while(l1 != null || l2 != null || carry > 0) {int num1 = (l1 != null ? l1.val : 0);int num2 = (l2 != null ? l2.val : 0);int sum = num1 + num2 + carry;int num = sum % 10;carry = sum / 10;ListNode cur = new ListNode(num);cur.next = newHead;newHead = cur;l1 = (l1 != null ? l1.next : null);l2 = (l2 != null ? l2.next : null);}return newHead;}ListNode reverseList(ListNode head) {ListNode pre = null;ListNode cur = head;while(cur != null) {ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}
}

在这里插入图片描述

2.Stack

如果不想用链表逆序,可以用Stack, 同样可以达到逆序的效果,但是速度不及上面的快。

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Stack<Integer> st1 = new Stack<>();Stack<Integer> st2 = new Stack<>();ListNode res = null;int carry = 0;//相当于逆序链表while(l1 != null) {st1.push(l1.val);l1 = l1.next;}while(l2 != null) {st2.push(l2.val);l2 = l2.next;}while(!st1.empty() || !st2.empty() || carry > 0) {int num1 = st1.empty() ? 0 : st1.pop();int num2 = st2.empty() ? 0 : st2.pop();int sum = num1 + num2 + carry;int num = sum % 10;carry = sum / 10;ListNode cur = new ListNode(num);cur.next = res;res = cur;}return res;}

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

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

相关文章

克服 ClickHouse 运维难题:ByteHouse 水平扩容功能上线

前言 对于分析型数据库产品&#xff0c;通过增加服务节点实现集群水平扩容&#xff0c;并提升集群性能和容量&#xff0c;是运维的必要手段。 但是对于熟悉 ClickHouse 的工程师而言&#xff0c;听到“扩容”二字一定会头疼不已。开源 ClickHouse 的 MPP 架构导致扩容成本高&…

C++图形开发(16):绘制一个圆环和一根针

文章目录 绘制一个圆环和一根针1.1 绘制1.2 line()函数1.3 circle()函数1.4 setlinestyle()函数1.5 setlinecolor()函数 接下来&#xff0c;我会继续制作一些小游戏&#xff0c;但因为整个难度的上升&#xff08;毕竟我也是初学者&#xff09;&#xff0c;可能文章不会再像之前…

Maven工程中排除依赖打包的两种方式

在Maven工程中,我们常需要依赖各种第三方库完成项目开发,但在最终交付时,往往不希望将这些依赖本身打包到产品中,以减小发布包体积。此时,可以通过以下两种方式实现: 使用provided 这适用于那些编译时需要,但运行时会由服务器或运行环境提供的库,典型的如Servlet API、JDBC驱…

spring boot 引入hive

在Spring Boot中使用Hive&#xff0c;需要引入以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-hadoop</artifactId> </dependency>然后&#xff0c;在application.…

Android 图片加载库改造

一、现状: 1、bug众多 加载前没有判断 context 是否为空&activity 是否已经销毁,导致崩溃; trying to use a recycled bitmap android.graphics.Bitmap 导致崩溃; 使用applicationContext 作为上下文,导致内存泄露,卡顿; ActivityUtilKt.context() && Activ…

http连接处理(下)(四)

1.结合代码分析请求报文响应 下面我们将介绍服务器如何响应请求报文&#xff0c;并将该报文发送给浏览器端。首先介绍一些基础API&#xff0c;然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分&#xff0c;介绍stat、mmap、iovec、writev。 流程图部分&…

如何在pycharm上安装yfinance库

在 PyCharm 上安装 yfinance 库&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开 PyCharm&#xff0c;创建一个新的 Python 项目或打开已有项目。在 PyCharm 的顶部菜单栏中&#xff0c;选择 “File”&#xff08;文件&#xff09;> “Settings”&#xff08;设置&a…

【Ubuntu 20.04LTS系统】安装CUDA11.8、cuDNN,可进行CUDA版本切换

Ubuntu 20.04LTS系统安装CUDA11.8、cuDNN&#xff0c;可进行CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项2. 安装CUDA3. 安装cuDNN4. CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ # 默认注释了源码镜像以提…

二维码识别 OCR 原理及如何应用于物流和仓储管理中

摘要 在传统的物流和仓储管理中&#xff0c;人工操作容易出现错误和低效率。然而&#xff0c;随着二维码技术的普及和二维码识别OCR接口的应用&#xff0c;物流和仓储管理实现了更高水平的自动化和智能化。通过扫描和解码二维码&#xff0c;物流和仓储管理系统可以实现货物跟踪…

Flutter有状态组件StatefulWidget

当继承StatelessWidget组件时&#xff0c;在组件中更新数据时页面不会立即刷新。 如果继承StatefulWidget时&#xff0c;只要在setState方法中更新数据后页面会实时更新数据。 Flutter有状态组件StatefulWidget 完整代码&#xff1a; import package:flutter/material.dart;v…

【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识

JavaEE进阶首章 文章目录 【JavaEE】JavaEE进阶&#xff1a;框架的学习 - Spring的初步认识1. JavaEE初阶 与 JavaEE进阶 开发上的区别1.1 Servlet VS Spring Boot1.2 Spring Boot的 “hello world”代码演示1.2.1 Spring Boot项目的创建1.2.2 hello world1.2.3 发布 2. 框架的…

.net core jwt 身份验证初步了解1

JWT全称Json Web Token jwt是用于身份验证的开放标准,是目前最流行的跨域认证解决方案&#xff0c;是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出&#xff0c;JWT 本身也是 Token&#xff0c;一种规范化之后的 JSON 结构的 Token&#xff0c;它可以在网络之间传递信…

分区类型ID一键变身!快速改变分区类型ID的简单方法

分区类型ID是什么&#xff1f; 想要改变分区类型ID&#xff0c;先得明白分区类型ID是什么。大多数电脑用户可能只熟悉分区和分区类型&#xff0c;实际上有5种分区类型&#xff1a;主分区、可扩展固件接口&#xff08;EFI&#xff09;、扩展分区、逻辑分区和Microsoft保留分…

idea 自定义类注释模板和方法模板,无警告

背景&#xff1a;idea&#xff1a;IntelliJ IDEA 2023.1.3 (Ultimate Edition) 效果&#xff1a;&#xff08;主要是没无参&#xff0c;不会换行&#xff09; 类&#xff1a; /** * author sss* date ${DATE} on ${TIME}* desc $NAME*/# 完全复制上面的&#xff0c;删除这一行…

全球公链进展| Polygon代币MATIC将升级为POL;BNB Beacon链主网「张衡」升级

一周速览 过去一周&#xff0c;明星项目动态如下&#xff1a; Optimism升级 OP Mainnet 上排序器&#xff1b; Polygon提议代币升级&#xff0c;用POL 取代MATIC&#xff1b; Arbitrum将激活One和Nova上的账户抽象端点支持&#xff1b; BNB Beacon Chain 将进行「张衡」升…

ES6标准下在if中进行函数声明

ES5中规定&#xff0c;函数只能在顶层作用域或函数作用域之中声明&#xff0c;不能在块级作用域声明。 // 情况一 if (true) {function f() {} }// 情况二 try {function f() {} } catch(e) {// ... }上面两种函数声明&#xff0c;根据 ES5 的规定都是非法的。但是&#xff0c…

mongodb作业

1.创建一个数据库 名字grade use grade2.数据库中创建一个集合名字 class db.createCollection("class")3.集合中插入若干数据 db.class.insert([{name:"zhang",age:10,sex:m,hobby:[a,b,c]}])4.查找 查看班级所有人信息 db.class.find()查看班级中年…

【C++】将类对象转换成基本数据类型

2023年7月19日&#xff0c;周三晚上&#xff1a; 今天晚上看源码的时候&#xff0c;突然在某个类里面看到了“operator bool() const;”&#xff0c;我完全想不起来这是啥意思了&#xff0c;于是今晚重新学习了一下 目录 类型转换函数的定义类型转换函数的作用 类型转换函数的…

王道计算机网络学习笔记(5)——传输层和应用层

前言 文章中的内容来自B站王道考研计算机网络课程&#xff0c;想要完整学习的可以到B站官方看完整版。 五&#xff1a;传输层 5.1&#xff1a;传输层基本概述 传输层的功能&#xff1a; 1传输层提供进程和进程之间的逻辑通信 2复用和分用 微信和QQ都使用传输层的协议进行发…

R语言ggplot2——柱形图

BMIread.table(/Users/zhangzhishuai/Downloads/33 lesson33 ggplot2散点图&#xff08;一&#xff09;/33_ggplot2/BMI.txt, header T,row.names 1,sep \t) library(ggplot2) BMI$namerownames(BMI) ggplot(BMI,aes(xname,yheight)) geom_bar(stat identity # identity:数…