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

news2024/10/6 22:19:54

在这里插入图片描述

用链表代表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.coloradmin.cn/o/767889.html

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

相关文章

BCG的Ribbonbar的categroy滚动控制处理方法

重点&#xff1a; 1.BCG的Ribbonbar可以通过鼠标滚轮进行界面滚动变化。 2.想要禁止这个功能&#xff0c;只能通过继承PreTranslateMessage消息&#xff0c;将滚动的消息进行屏蔽即可。它们没有控制滚动的函数处理 class CLbCBCGPRibbonBar : public CBCGPRibbonBar { public…

如何写一个Python三方包供别人使用

第一步&#xff0c;新建文件夹 好的&#xff0c;我们先new一个项目&#xff0c;空文件夹就行&#xff0c;例如新建一个叫my-wheel的项目 第二步&#xff0c;写核心代码 新建一个mywheel的包&#xff0c;包下新建文件example.py def msg():return "a python lib named …

杜冬亮,高考文科状元,从辉煌学海驶向人生新篇章

在众多学子的梦想之路上&#xff0c;总有一些人犹如璀璨的星辰&#xff0c;照亮前行的道路&#xff0c;杜冬亮&#xff08;曾用名&#xff1a;杜惜泽&#xff09;便是其中的一员。他以2004年高考文科状元的辉煌成就&#xff0c;跨越了学海的一座座险峻高峰&#xff0c;为后来的…

将已删除的 Safari 历史记录恢复到 iPhone 的 6 种最佳方法

Safari 是 iPhone 上的默认浏览器。其直观且易于使用的界面是许多 iPhone 用户更喜欢 Safari 而非其他浏览器的原因之一。但是&#xff0c;如果您无意或故意删除了浏览历史记录&#xff0c;但发现稍后仍需要恢复已删除的 Safari 历史记录&#xff0c;这可能会给您带来一些麻烦。…

LCD-STM32液晶显示中英文-(6.unicode字符集)

目录 Unicode字符集和编码 UTF-32 UTF-16 UTF-8&#xff08;重点&#xff1a;必须掌握&#xff09; BOM ANSI Unicode字符集和编码 由于各个国家或地区都根据使用自己的文字系统制定标准&#xff0c;同一个编码在不同的标准里表示不一样的字符&#xff0c;各个标准互不兼容…

RabbitMQ ---- RabbitMQ 其他知识点

RabbitMQ ---- RabbitMQ 其他知识点 1. 幂等性1.1 概念1.2 消息重复消费1.3 解决思路1.4 消费端的幂等性保障1.5 唯一 ID 指纹码机制1.6 Redis 原子性 2. 优先级队列2.1 使用场景2.2 如何添加2.3 实战 3. 惰性队列3.1 使用场景3.2 两种模式3.3 内存开销对比 1. 幂等性 1.1 概…

机器学习32:《推荐系统-V》再谈召回、打分和重排

在《机器学习28&#xff1a;推荐系统-概述》一文中&#xff0c;笔者概述了推荐系统的基本术语和一般架构&#xff0c;通过【推荐系统 I&#xff5e;IV】系列课程的学习&#xff0c;相信读者对推荐系统已经有了一定的理解。本节&#xff0c;我们再来回顾一下推荐系统的核心环节—…

常见的电机控制算法实现

BLDC电机控制算法 BLDC&#xff08;Brushless Direct Current Motor&#xff09;无刷电机属于自换流型(自我方向转换)&#xff0c;因此控制起来更加复杂。 BLDC电机控制要求了解电机进行整流转向的转子位置和机制。对于闭环速度控制&#xff0c;有两个附加要求&#xff0c;即…

代码随想录day21

二叉搜索树的最小绝对差 思路&#xff1a;记住二叉搜索树的特性&#xff0c;中序遍历是有序数组&#xff0c;所以我们直接对树做一次中序遍历&#xff0c;然后对数组中的node进行一次循环遍历不断获取最小值就行了&#xff0c;这里需要创建一个max_value拿来作比较 对于中序遍历…

推荐系统-基于标签的Top-N个性化推荐实现

随着移动互联网的快速发展&#xff0c;UGC标签系统受到越来越多推荐应用&#xff0c;标签不但能反映用户的兴趣又能描述物品的本身特征。现有的标签推荐算法没有考虑用户的连续行为所产生的影响&#xff0c;于是人们提出了一种基于标签的个性化推荐算法。该算法将〈用户-标签-物…

【idea】idea全局设置Maven配置

Idea版本&#xff1a;2021.1.1 1、点击File->Close project 2、点击Customize->All settings 3、设置Maven

2023年8个最佳WordPress电子书主题

您是正在为您的网站寻找最佳的WordPress电子书主题吗&#xff1f;无论您是独立作家、出版社还是同时销售电子书和实体书的在线书店&#xff0c;拥有一个可以直接销售电子书的网站都是一个好主意。 销售电子书可能有助于分销和扩大影响力&#xff0c;但也会侵蚀您的利润。例如&…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元&#xff0c;以及将这些词元可以视为一系列离散的观测&#xff0c;例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是&#xff0c; x t x_t xt​&#xff08…

spring整合dataJPA

1.入门案例 1.1 项目整体结构 表&#xff1a;sql DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( user_id int(0) NOT NULL AUTO_INCREMENT, user_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, real_name varchar(255) CHAR…

关于互联网金融平台性能测试的过程经历分享

目录 项目角色 测试范围 测试策略 项目角色 性能测试专家&#xff0c;负责互金平台以及5个关联外围系统性能测试方案制定、测试策略制定&#xff0c;测试前期配合架构组&#xff0c;某某云根据平台内各模块的目标处理能力流量统计来计算调用占比并估算机器设备配置。端对端…

数据结构 ~ 栈、队列

栈 一个后进先出的数据结构、JS中没有栈&#xff0c;可以使用 Array 模拟 const stack [] stack.push(1) // 入栈 stack.push(2) // 入栈 const item1 stack.pop() // 出栈 const item2 stack.pop() // 出栈以上代码可以使用 nodeJs 断点调试&#xff08;F5启动&#xff0…

伊利投资者日:千亿航母如何“加速度”?

7月14日&#xff0c;伊利股份举办了投资者日活动。在交流中&#xff0c;伊利股份管理层积极表示了实现 “2025年实现全球乳业前三&#xff0c;2030年实现全球乳业第一”的目标信心&#xff0c;也展示了公司目前的成绩以及长期成长的规划。 从投资者日活动来看&#xff0c;伊利透…

10.6.4 【Linux】字符转换命令: tr, col, join, paste, expand

tr tr 可以用来删除一段讯息当中的文字&#xff0c;或者是进行文字讯息的替换。 其实这个指令也可以写在“正则表达式”里头&#xff01;因为他也是由正则表达式的方式来取代数据的&#xff01;以上面的例子来说&#xff0c;使用 [] 可以设置一串字呢&#xff01;也常常用来取…

C语言项目小游戏之俄罗斯方块

今天给大家带来一个用C语言实现的俄罗斯方块小游戏 游戏截图&#xff1a; 首先我们先创建一个名为mywindows.h的头文件。用来设置我们操作台的各种功能实现 mywindows.h #ifndef MYWINDOWS_H_INCLUDED #define MYWINDOWS_H_INCLUDED//系统调用模块 #include <windows.h&g…