1- 2 . LeetCode_两数相加
1+ 2 . LeetCode_两数相加
22===
33
4- 给你两个 非空 的链表 ,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字 。
4+ 给你两个非空的链表 ,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字 。
55
66请你将两个数相加,并以相同形式返回一个表示和的链表。
77
8- 你可以假设除了数字 0 之外,这两个数都不会以 0 开头 。
8+ 你可以假设除了数字0之外,这两个数都不会以0开头 。
99
1010
1111输入:l1 = [ 2,4,3] , l2 = [ 5,6,4]
1818输出:[ 8,9,9,9,0,0,0,1]
1919
2020
21- 提示:
21+ 提示:
2222
23- - 每个链表中的节点数在范围 [ 1, 100] 内
23+ - 每个链表中的节点数在范围[ 1, 100] 内
2424- 0 <= Node.val <= 9
2525- 题目数据保证列表表示的数字不含前导零
2626
2727
2828
29- 想法:
29+ 想法:
3030
3131我的想法是先把两个链表转成两个整数相加,然后把这个整数转成字符串再次生成链表。
3232
3333这种方案是不可行的,因为链表的长度可能会很长,整数是操作不了的,例如:
3434
3535
36- 方法:
36+ 方法:
3737
38- 由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。
38+ - 由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。
3939
40- 我们同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。具体而言,如果当前两个链表处相应位置的数字为 n1,n2,进位值为 carry,则它们的和为 n1+n2+carry;
40+ - 我们同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。具体而言,如果当前两个链表处相应位置的数字为 n1,n2,进位值为 carry,则它们的和为 n1+n2+carry;
4141其中,答案链表处相应位置的数字为 (n1+n2+carry)mod10,而新的进位值为 [ (n1+n2+carry) / 10]
4242
43- 如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个 0 。
43+ - 如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个 0 。
4444
45- 此外,如果链表遍历结束后,有 carry >0,还需要在答案链表的后面附加一个节点,节点的值为 carry。
45+ - 此外,如果链表遍历结束后,有carry >0,还需要在答案链表的后面附加一个节点,节点的值为 carry。
4646
4747
4848
4949
5050![ image] ( https://raw.githubusercontent.com/CharonChui/Pictures/master/leetcode_2_twoaddsum.png?raw=true )
5151
5252
53- - 将链表反过来看,头结点在右侧
54- - 横线上的数字为进位
55- - 2 + 5 + 0(第一个进位默认为0) = 7
53+ - 将链表反过来看,头结点在右侧
54+ - 横线上的数字为进位
55+ - 2 + 5 + 0(第一个进位默认为0) = 7
5656
57- - 7 % 10得到新节点中的元素为7
58- - 7 / 10得到下一个进位为0
57+ - 7 % 10得到新节点中的元素为7
58+ - 7 / 10得到下一个进位为0
5959
6060
6161![ image] ( https://raw.githubusercontent.com/CharonChui/Pictures/master/leetcode_2_twoaddsum_2.png?raw=true )
@@ -123,11 +123,11 @@ class Solution {
123123
124124
125125
126- 复杂度分析:
126+ 复杂度分析:
127127
128- - 时间复杂度: O(max(m,n)),其中 m 和 n 分别为两个链表的长度 。我们要遍历两个链表的全部位置,而处理每个位置只需要 O (1) 的时间。
128+ - 时间复杂度: O(max(m,n)),其中m和n分别为两个链表的长度 。我们要遍历两个链表的全部位置,而处理每个位置只需要O (1)的时间。
129129
130- - 空间复杂度: O(1)。注意返回值不计入空间复杂度。
130+ - 空间复杂度: O(1)。注意返回值不计入空间复杂度。
131131
132132
133133### 改进: 递归
@@ -139,7 +139,7 @@ class Solution {
139139 }
140140}
141141
142- public ListNode add(ListNode l1, ListNode l2, int carry) {
142+ public ListNode add(ListNode l1, ListNode l2, int carry) {
143143 if (l1 == null && l2 == null && carry == 0 ) {
144144 return null ;
145145 }
0 commit comments