Unique Binary Search Trees
题目大意
给你一个数字n,求出由(1,2、、、n)构成的BST(binary search tree)有多少种
我的解法
思路
使用递归,依次求解(超时)
代码
class Solution {
public:
int numTrees(int n) {
if(n==0)
{
return 1;
}
if(n==1)
{
return 1;
}
int sum = 0;
for(int i=0; i<n; i++)
{
sum = sum + numTrees(i) * numTrees(n-i-1);
}
return sum;
}
};
优解
思路
使用动态规划
G(n):长度为n时,BST的数目
F(i,n):n个数时,i作为根节点,BST的数目
G(n) = F(1,n) + F(2,n) + F(3,n) … + F(n,n)
F(i,n) = G(i-1)*G(n-i)
G(n) = G(0)*G(n-1) + G(1)*G(n-2) +… +G(n-1)*G(0)
### 代码
class Solution {
public:
int numTrees(int n) {
vector<int> G(n+1, 0);
G[0] = 1;
G[1] = 1;
for(int i=2; i<=n;i++)
{
for(int j=0;j<i;j++)
{
G[i] += G[j]*G[i-j-1];
}
}
return G[n];
}
};