當時訂閱了極客時間王爭老師的資料結構與演算法之美專欄,總結的非常好
乙個問題的解可以分解為幾個子問題的解
這個問題與分解之後的子問題,出來數的規模不同,求解思路完全一樣
存在遞迴終止條件
寫遞迴**的關鍵就是找到如何將大問題分解為小問題的規律,並且基於此寫出遞推公式,然後再推敲終止條件,最後將遞推公式和終止條件翻譯成**
編寫遞迴**的關鍵是,只要遇到遞迴,我們就把它抽象成乙個遞推公式,不用想一層層的呼叫關係,不要試圖用人腦去分解遞迴的每個步驟
遞迴**要警惕堆疊溢位
遞迴**要警惕重複計算
有時候乙個問題要分解為多個子問題的情況,可能不好理解.
計算機擅長做重複的事情,所以遞迴正合它的胃口。而我們人腦更喜歡平鋪直敘的思維方式。當我們看到遞迴時,我們總想把遞迴平鋪展開,腦子裡就會迴圈,一層一層往下調,然後再一層一層返回,試圖想搞清楚計算機每一步都是怎麼執行的,這樣就很容易被繞進去。
將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例 1:
輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
示例 2:
輸入:l1 = , l2 =
輸出:示例 3:
輸入:l1 = , l2 = [0]
輸出:[0]
兩個鍊錶的節點數目範圍是 [0, 50]
-100 <= node.val <= 100
l1 和 l2 均按 非遞減順序 排列
/**
* definition for singly-linked list.
* struct listnode ;
*/struct listnode*
mergetwolists
(struct listnode* l1,
struct listnode* l2)
else
}
/**
* definition for singly-linked list.
* public class listnode
* listnode(int val)
* listnode(int val, listnode next)
* }*/class
solution
else
}}
Leetcode 21 合併鍊錶 python
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。方法一 非遞迴 coding utf 8 class listnode def init self,x self.val x self.next none class solution 返回合併後列表 def...
leetcode 21 合併公升序鍊錶
將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 1.考慮遞迴,如果遍歷的時候,l1節點值小於l2,則返回的應該為此時的l1節點及l1.next和l2拼接後的結果,這就形成了遞迴的條件...
leetcode 21 合併兩個有序鍊錶 鍊錶
題目 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 definition for singly linked list.class listnode object def init sel...