@author: sdubrz
@date: 2020.04.25
題號: 96
題目難度: 中等
考察內容: 動態規劃
原題鏈接 https://leetcode-cn.com/problems/unique-binary-search-trees/
題目的著作權歸領釦網絡所有,商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題代碼轉載請聯繫 lwyz521604#163.com
給定一個整數 n,求以 1 … n 爲節點組成的二叉搜索樹有多少種?
示例:
輸入: 3
輸出: 5
解釋:
給定 n = 3, 一共有 5 種不同結構的二叉搜索樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
通過次數40,278 提交次數61,717
解法
一般來講,這種問題規模逐漸從1漲到 n 的,都會有一個遞推關係,這種問題就可以考慮用動態規劃的方法來解決。
對於以 1…n 爲節點組成的二叉搜索樹,可以根據其根節點進行一下分類。 1…n 都有可能爲根節點,所以根節點總共有 n 種可能。假設以 x 爲根節點,則左子樹有 x-1 個節點,右子樹有 n-x 個節點。左子樹和右子樹分別有多少種可能,又是一個遞歸的問題。所以以 x 爲根節點時,總共有 種可能的二叉搜索樹。將所有根節點的情況加起來就是整個問題的解了。下面是 Java 程序的實現。
class Solution {
public int numTrees(int n) {
if(n<2){
return 1;
}
int[] count = new int[n+1];
count[0] = 1;
count[1] = 1;
for(int i=2; i<=n; i++){
int sum = 0;
for(int root=1; root<=i; root++){
sum = sum + count[root-1]*count[i-root];
}
count[i] = sum;
}
return count[n];
}
}
在 LeetCode 系統中提交的結果:
執行結果: 通過 顯示詳情
執行用時 : 0 ms, 在所有 Java 提交中擊敗了 100.00% 的用戶
內存消耗 : 36.2 MB, 在所有 Java 提交中擊敗了 7.69% 的用戶
本文是在 LeetCode 刷題的筆記,如有不足之處,歡迎通過留言或QQ賜教。