Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
算法思想:
1、dp问题,dp[i]表示1到iBST个数,则有
对于新加入一个元素的个数其实也就是将1到i依次作为根节点,比如对于1节点,个数也就是1左边的个数假设为dp[0]乘以1右边的个数dp[i-1]。
class Solution {
public:
int numTrees(int n) {
vector<int> dp;
dp.assign(n+1,0);
dp[0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
dp[i]+=dp[j-1]*dp[i-j];
return dp[n];
}
};
2、递归
class Solution {
public:
int numTrees(int n) {
if(n==0)return 1;
int sum=0;
for(int i=1;i<=n;i++)
sum+=numTrees(i-1)*numTrees(n-i);
return sum;
}
};
3、根据dp[i]与dp[i-1]之间的关系,也可以把它理解成找规律,很直接
class Solution {
public:
int numTrees(int n) {
int dp = 1;
for (int i = 2; i <= n; i++)
dp = 2*(2*i-1)*dp/(i+1);
return dp;
}
};