給定一個整數 n,代表節點數為 1 到 n,請問可以組成多少種不同的 二叉搜尋樹(BST)?
BST:左邊的值 < 根節點 < 右邊的值
卡塔蘭數(Catalan Number):以每個數字作為根節點時,左子樹與右子樹的組合數相乘,然後全部加總起來。
dp[i]
表示有 i 個節點時,可以組成的 BST 總數dp[i] += dp[j - 1] * dp[i - j];
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1, 0);
dp[0] = 1;
dp[1] = 1;
for(int i=2;i<n+1;i++){
for(int j=1;j<i+1;j++){
dp[i] += dp[j-1] * dp[i-j];
}
}
return dp[n];
}
};