题意:
是leetcode 95. Unique Binary Search TreesII的简单版,95题需要存储每棵树的结构,本题只需要计算所有树的个数。
思路:
因为只需计算个数,所以1~n的所有BST的总数和2~n+1的所有BST的总数是相同的,即结点个数一致的所有可能的BST数相是固定的。由上一题的思路,dp[n]就等于N个结点都作为根节点时可能的BST个数之和。
java代码:
class Solution {
public int numTrees(int n) {
if(n<1){
return 0;
}
int[] dp = new int[n+1];
dp[0] = dp[1] = 1;
for(int i = 2;i<=n;i++){
dp[i] = 0;
for(int j = 1;j<=i;j++){
dp[i]+=dp[j-1]*dp[i-j];
}
}
return dp[n];
}
}