刷中等題目,主要遇到的問題是對算法的應用不熟悉無法實做。
Unique Paths
給定m
與n
,找出獨一無二的路徑,n
與m
最多為100
。
解法
排列組合題目,由於計算階乘可能會耗費大量時間,採用巴斯卡定理解決問題, 動態規劃產生巴斯卡三角形,由於只要找出終點,只須用一個維度 用來計算即可。
House Robber III
給定二元樹,小偷必須獲得最大金額,不能連續竊取兩個連接節點。
解法
一開始看起來類似像Min-max heap
的概念,但是這樣解得出的結果是錯的。
dfs
的規則:
- 如果已經偷竊,兩個子節點就不能偷竊
- 如果沒有偷竊,子節點可偷竊或不偷竊
為了避免重複呼叫組合爆炸,因此採用多回傳的方法編寫, 也可以採用哈希表做DP。
LeetCode Dynamic programming Tree Recursion