☆打卡算法☆LeetCode 2、两数相加 算法解析

简介: “将两个链表中的数字组合成两个数,两个数相加,并返回一个相同格式的表示和的链表。”

一、题目

1、算法题目

“将两个链表中的数字组合成两个数,两个数相加,并返回一个相同格式的表示和的链表。”

题目链接: 来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/ad…

2、题目描述

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

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

比如:

l1 = [1,2,3],l2 = [4,5,6]

输出:[9,7,5]

因为321 + 654 = 975 ,返回 [9,7,5] 。


二、解题

1、思路分析

这道题是算两个链表组成的数的和,所以首先在较短的链表后面补零让两个链表的位数补齐,再将链表中的元素相加,还要考虑进位问题。

2、代码实现

假设当前两个链表处相应位置的数字为n1,n2,进位值为carry,则它们的和为newVal=n1+n2+carry;

那么答案链表新的进位值为(n1 + n2 + carry) / 10 也就是 carry = newVal / 10; 那么答案链表的对应位置的数字为n1 + n2 + carry % 10 也就是 newVal %= 10;

public class Solution 
{
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2) 
    {
        ListNode p1 = l1, p2 = l2;
        ListNode dummy = new ListNode(-1);
        ListNode p = dummy;
        int carry = 0, newVal = 0;
        while (p1 != null || p2 != null || carry > 0) 
        {
            newVal = (p1 == null ? 0: p1.val) + (p2 == null ? 0: p2.val) + carry; 
            carry = newVal / 10;
            newVal %= 10;
            p.next = new ListNode(newVal);
            p1 = p1 == null? null: p1.next;
            p2 = p2 == null? null: p2.next;
            p = p.next;
        }
        return dummy.next;
    }
}           
复制代码

执行结果:

网络异常,图片无法展示
|

3、时间复杂度

时间复杂度:O(max(m,n))

m和n是两个链表的长度。要遍历两个链表的全部位置,而每个位置只需要O(1)的时间。

空间复杂度:O(1)


三、总结

这道题难度中等,对于新学习算法的人来说还是有点难度的。

按顺序刷题的在默哀。。



相关文章
|
17小时前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
20 0
|
17小时前
|
存储 机器学习/深度学习 算法
|
17小时前
|
机器学习/深度学习 数据采集 人工智能
【热门话题】AI作画算法原理解析
本文解析了AI作画算法的原理,介绍了基于机器学习和深度学习的CNNs及GANs在艺术创作中的应用。从数据预处理到模型训练、优化,再到风格迁移、图像合成等实际应用,阐述了AI如何生成艺术作品。同时,文章指出未来发展中面临的版权、伦理等问题,强调理解这些算法对于探索艺术新境地的重要性。
31 3
|
17小时前
|
存储 算法 安全
|
17小时前
|
存储 算法 程序员
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
|
17小时前
|
机器学习/深度学习 存储 人工智能
数据结构与算法设计:深度解析与实践
数据结构与算法设计:深度解析与实践
17 0
|
17小时前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
22 3
|
17小时前
|
存储 算法
代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
22 1
|
17小时前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
18 3
|
17小时前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。

热门文章

最新文章

推荐镜像

更多