一腳踏入軟體工程師寫 Code 的世界,不免俗地會碰上 Leetcode 的測驗,來測試你的溝通力、系統性地解決問題的能力和如何化抽象為具體。第七週的活動主要為 Recursion – 遞迴。
課程相關資訊
[連結]:https://www.accupass.com/event/2010251353233453323900
課程對應章節:Week7 U46~U48
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
內容
關於遞迴的思考邏輯
遞迴是函式重複運行,每個函式的回傳值是會逐漸累積到一個 Stack 中,再一個個輸出而得。因此,會有著以下的設計架構:
1 2 3 4 5 6 7 8 9 10 11 |
function foo(parameters) { if (Base Case) return 結果 else General Case ( foo() ) } /* * Base case:可當作是停止條件,程式執行到 base case 時,就會回傳結果並跳出。 * 在 general case 中,函式會不斷地呼叫自己,如此就會達成「遞迴」的效果。 */ |
LeetCode 題目
24. Swap Nodes in Pairs
連結:https://leetcode.com/problems/swap-nodes-in-pairs/
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 |
var swapPairs = function(head) { if (!head || !head.next) return head; let next = head.next head.next = swapPairs(next.next) next.next = head return next }; var swapPairs = function(head) { let thead = new ListNode(0) thead.next = head let temp = thead while(temp.next !== null && temp.next.next !== null){ let start = temp.next let end = start.next temp.next = end start.next = end.next end.next = start temp = start } return thead.next }; |