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

news2024/11/25 18:45:18

两数相加

  • 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的, 并且每个节点只能存储 一位 数字。
  • 请你将两个数相加,并以相同形式返回一个表示和的链表。
  • 你可以假设除了数字 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 {
	static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    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 -> 3
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        l1.next.next = new ListNode(3);

        // 构造链表 465: 5 -> 6 -> 4
        ListNode 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.coloradmin.cn/o/1531226.html

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

相关文章

网速监控,实时网络速度监控

带宽与网速 现在,对高带宽的需求空前高涨,而且网络(包括标准的内部部署)以及公共、私有和混合环境都变得更加复杂。 虽然带宽和网速经常互换使用,但它们并不总是相同的。网速更多的是与延迟有关,而不是与…

文件上传基础篇

文件上传基础篇 文件上传漏洞原理 ​ 目标网站存在文件上传接口,但是对用户上传的文件没有做仔细甄别,导致黑客可以根据此功能点直接上传木马到网站服务器,造成危害 文件上传存在点 ​ 通常有头像上传,pdf上传 文件上传防护 …

Vue 计算属性和监视属性

Vue 计算属性和监视属性 computed computed 计算属性 规则: 用已有的属性计算不存在的属性默认调用一次get()只有值不发生改变的时候才可以使用简写(函数);值发生改变 使用对象式写法,才可以配置set()方法底层原理使…

har的编译及引用

1.创建HAR 选择文件->新建->模块,然后再下一个页面选择static library,之后在接下来的页面设置模块名字,然后下一步直到完成。 2.创建成功后在新建的模块下编写自己的代码内容。 3.编译HAR 编译默认是从Index.ets文件下进行导出,如果…

Flink:使用 Faker 和 DataGen 生成测试数据

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

用图解说明mysql 行锁加锁规则

加锁原则 原则 1:加锁的基本单位是 next-key lock。希望你还记得,next-key lock 是前开后闭区间。原则 2:查找过程中访问到的对象才会加锁。优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock …

Linux---基本操作命令之用户管理命令

1.1useradd 添加新用户 root用户:/root 普通用户:/home/ 创建的用户还是david,只是在dave文件夹下 1.2 passwd 设置密码 给用户tony设置密码: 123456 1.3 id 查看用户是否存在 查看有没有这个用户:id 名字 gid:用…

当人工智能无处不在

以下文章来源:新华社 2024年度的“西南偏南”多元创新大会和艺术节8日至16日在得克萨斯州首府奥斯汀举行。在今年的数百场讲座或沙龙讨论中,热度最高、讨论最多的前沿话题不难猜——人工智能(AI)。 焦点高度发散。从太空探索到音乐…

【windows】Python文件打包成dll文件及遇见的问题

最近需要将py文件转为dll,特此记录。 操作步骤来自于:将Python文件发布成DLL并调用 写一个py文件 文件名:test_numpy.py import numpy as npdef func(my_list1, my_list2):list_np1 np.array(my_list1)list_np2 np.array(my_list2)retur…

Visual Studio 2013 - 输出窗口一闪而过问题解决

Visual Studio 2013 - 输出窗口一闪而过问题解决 1. Visual Studio Console 一闪而过问题解决1.1. set Debug1.2. set Release References 1. Visual Studio Console 一闪而过问题解决 工程 -> 属性 -> 配置属性 -> 链接器 -> 系统 -> 子系统 -> 下拉框 -&g…

机器视觉系统选型-镜头参数

镜头参数: 光圈:光圈是一个用来控制镜头通光量的装置 ,表示光圈大小我们是用光圈值(F值) ,如F1.4,F2,F2.8 焦距(Focus):透镜中心到其焦点的距离 景…

crossover虚拟机 crossover软件干嘛的 虚拟机软件的使用方法 mac虚拟机装windows

与传统的虚拟机软件(如VMware、VirtualBox)相比,CrossOver具有更高的运行效率和更好的用户体验。因为它并不创建一个完整的Windows虚拟机,而是仅模拟应用程序所需的运行环境。这使得CrossOver在启动和运行Windows应用程序时更加快…

平衡计分卡:企业/产品绩效管理的金钥匙

一、摘要 在企业管理领域,有一个广为流传的箴言:“衡量什么,得到什么。”这句话道出了衡量与结果之间的紧密关系。企业若想要取得理想的绩效,就必须建立科学、合理的衡量体系。而平衡计分卡,正是这样一套能够全面、系…

#Ubuntu(修改root信息)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)命令行终端: a.右键,open terminal b.快捷键 ctrlaltt (2)进行root修改 sudo passwd &a…

【09】进阶JavaScript事件循环Promise

一、事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 何为线程? 有了进程后,就可以运行程序的代码了。 运行代码的「人」称之…

【web世界探险家】HTML5 探索与实践

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ &…

【MySQL | 第五篇】MySQL事务总结

文章目录 5.MySQL事务5.1什么是事务?5.2什么是数据库事务?5.3数据库事务四大特性5.4并发事务带来的问题及解决方案?5.4.1脏读/不可重复读/幻读5.4.2不可重复读和幻读有什么区别?5.4.3解决并发事务带来的问题(1&#xf…

windows服务器iis更换彻底删除 原443 ssl证书以及一个服务器运行多个独立域名网站并绑定多个证书的方法

服务器上的433 ssl证书,可以让网站以https加密方式访问,但是这个证书会占用443端口,iis7版本,只能安装一个443证书,所以.原来的过期了.需要删除.删除方式,不是进运行 winr的mmc 而是进iis的默认的总的主页面板(不是点击具体的网站或者程序池),点击服务器证书.进去才能删除.否则…

5G网络架构及技术(一):入门级介绍

参考资料: [1] 5G网络架构,March 15, 2020 / By Adnan Ghayas [2] 5G应用场景,June 2, 2021 / By Adnan Ghayas [3] 独立和非独立5G网络,September 19, 2020 / By Adnan Ghayas 5G网络架构(一):…

人类与AI:谁做出最好的决定?

此为看完视频Humans vs. AI: who makes the best decisions?后的笔记。 对于不同的任务,AI和人类各有擅长。 在本视频中,作者具化到了一个欺诈检测系统。欺诈检测系统会生成潜在欺诈交易的警报,金融分析师会审查每个警报。但每天都会生成数…