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.明确二叉搜索树的概念,左<根,右>根。
2.第一次写dp动态规划,看了算法书,觉得这种题目从底层向上推更好。
3.找一下规律,用f[n]来代表所求结果
f[0]=1,因为是空树;
f[1]=1,只有一棵树;
f[2]=2=f[0]*f[1]+f[1]*f[0];
f[3]=f[0]*f[2]+f[1]*f[1]+f[2]*f[0];
。。。。。。
f[n]=f[0]*f[i-1]+...+f[k-1]*f[i-k]+...+f[i-1]*f[0]
找到了递推式。
class Solution {
public:
int numTrees(int n) {
vector<int> f(n+1,0);
f[0]=1;
f[1]=1;
for(int i=2;i<=n;i++)
{
for(int k=1;k<=i;k++)
f[i]+=f[k-1]*f[i-k];
}
return f[n];
}
};