Leetcode

[Leetcode] 2-add-two-numbers

這幾天解 LeetCode 解到有點上癮,今天遇到的這題覺得蠻有趣的 (其實原理也很簡單)。這題是 2-add-two-numbers,會有兩組由 ListNode 所建立的 Singly-linked list 進到函式中,要求就是要把每個數字都相加,如果有進位的話就累進到下一位 (每個list最多就一個位元)。不過在設計上我鬼打牆了一陣子,應該是因為前面有偷偷去看別人解答(結果反而困住自己啊XDDDD),後面沈澱一下開始寫才發現根本是被別人誤導… 下面放上我寫的程式碼,如果有興趣的話可以互相交流!

Solution

1
2
3
4
5
6
7
8
9
10
var addTwoNumbers = function(l1, l2, carry=0, list=new ListNode(0)) {
const sum = (l1.val?l1.val:0) + (l2.val?l2.val:0) + carry
list.val = sum % 10
carry = parseInt(sum / 10)

if (l1.next != null || l2.next != null || carry != 0) {
list.next = addTwoNumbers(l1.next?l1.next:0, l2.next?l2.next:0, carry)
}
return list
}

TestCode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function ListNode(val) {
this.val = val;
this.next = null;
}

inl1 = new ListNode(2)
inl1.next = new ListNode(4)
inl1.next.next = new ListNode(3)

inl2 = new ListNode(5)
inl2.next = new ListNode(6)
inl2.next.next = new ListNode(4)

console.log(addTwoNumbers(
inl1,
inl2,
))



話說現在用 ES6 寫起來真的是很爽,用語法糖混著寫真的是舒服很多。