欢迎光临散文网 会员登陆 & 注册

算法:两数相加

2022-05-23 10:37 作者:做架构师不做框架师  | 我要投稿

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

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

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

示例

  • 输入:l1 = [2,4,3], l2 = [5,6,4]

  • 输出:[7,0,8]

  • 解释:342 + 465 = 807

提示

  • 每个链表中的节点数在范围 [1, 100] 内

  • 0 <= Node.val <= 9

  • 题目数据保证列表表示的数字不含前导零

方法一:模拟

思路与算法

首先,我们按照示例中的结果发现我们可以同时遍历这两个链表,按照同一方向,相同的位置的数字进行类加

举例说明:

n1、n2代表两个链表相同位置的值,carry代表进位值。最终结果的链表的相同位置的值为 (n1 + n2 + carry) % 10 ,新的进位值为(n1 + n2 + carry)/ 10。

如果两个链表的长度不同,则可以认为短的链表的后面有若干个 0 。

最后,如果链表遍历结束后,如果carry > 0,那还需要在最后的链表上再附加一个节点,节点的值为 carry。

代码如下:

复杂度分析

  • 时间复杂度:O(max(m,n)),其中 m 和 n 分别为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1) 的时间。

  • 空间复杂度:O(1)。注意返回值不计入空间复杂度。

写在最后

本文内容出处是力扣官网,希望和大家一起刷算法,在后面的路上不变秃但是变强!

好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。


算法:两数相加的评论 (共 条)

分享到微博请遵守国家法律