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

举报
恬静的小魔龙 发表于 2021/10/24 18:06:38 2021/10/24
【摘要】 > 推荐阅读>> - CSDN主页> - GitHub开源地址>- Unity3D插件分享> - 简书地址> - 我的个人博客> - QQ群:1040082875大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。## 一、题目### 1、算法题目“将两个链表中的数字组合成两个数,两个数相加,并返回一个相同格式的...

img

> 推荐阅读

>

> - CSDN主页

> - GitHub开源地址

>- Unity3D插件分享

> - 简书地址

> - 我的个人博客

> - QQ群:1040082875

大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。

## 一、题目

### 1、算法题目

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

题目链接:

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/add-two-numbers/

### 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;

```csharp

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;

​ }

}

```

执行结果:

image.png

### 3、时间复杂度

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

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

空间复杂度:O(1)

## 三、总结

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

按顺序刷题的在默哀。。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。