考虑根节点i可组成的BST的数量,
小于i的(i-1)个数可以组成N颗BST,大于i的(n-i)个数可以组成M颗BST,
因此以i为根节点的BST共有M*N颗。
class Solution {
public:
int numTrees(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> f(n+2,0);
f[0]=1;
f[1]=1;
for(int i=2;i<=n;++i){
for(int j=1;j<=i;++j){
f[i]+=f[j-1]*f[i-j];
}
}
return f[n];
}
};