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
方法:动态规划。
首先,f(0)=1
有规律(注意观察,左子树节点个数 右子树节点个数)
f(1)=f(0)*f(0)
f(2)=f(0)*f(1)+f(1)*f(0)
f(3)=f(0)*f(2)+f(1)*f(1)+f(2)*f(0)
...
然后,用迭代的方法写递推计算的程序即可(如果用递归可能会有重复计算的冗余)。
class Solution {
private:
map<int,int> m;
public:
int numTrees(int n) {
m[0]=1;
for(int i=1; i<=n; i++)
{
int tmp=0;
for(int j=0; j<=i-1; j++)
{
tmp+=m[j]*m[i-j-1];
}
m[i]=tmp;
}
return m[n];
}
};