-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2-Add-Two-Numbers.js
77 lines (59 loc) · 1.25 KB
/
2-Add-Two-Numbers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
//法一:一次性求和、取余、进位
// Runtime: 259ms
var addTwoNumbers = function(l1, l2) {
var sum = 0,
carry = 0,
head = new ListNode(0),
cur = head;
while (l1 || l2) {
var l1Val = l1 ? l1.val : 0,
l2Val = l2 ? l2.val : 0;
sum = l1Val + l2Val + carry;
nodeValue = sum % 10;
cur.next = new ListNode(nodeValue);
cur = cur.next;
carry = sum >= 10 ? 1 : 0;
l1 = l1.next || 0;
l2 = l2.next || 0;
}
if (carry) {
cur.next = new ListNode(1);
cur = cur.next;
}
return head.next;
};
//法二:分两次求和(先将了l1的值加到val中,再加l2的值)最后判断进位
//Runtime: 192ms
var addTwoNumbers = function (l1, l2) {
var head = new ListNode(0),
res,
cur,
prev = head;
while (l1 || l2) {
cur = prev.next || new ListNode(0);
prev.next = cur;
cur.val += (l1 ? l1.val : 0);
cur.val += (l2 ? l2.val : 0);
if (cur.val >= 10) {
cur.val -= 10;
cur.next = new ListNode(1);
}
prev = cur;
l1 = l1 ? l1.next : 0;
l2 = l2 ? l2.next : 0;
}
res = head.next;
return res;
}