149 二叉搜索树的数量
解法一:动态规划记忆
d[i]表示i个递增的数字能构成的二叉搜索树的数量
class Solution {
public:
int numTrees(int n) {
int d[10000]={0};
d[0]=1;
d[1]=1;
for(int i=2;i<=n;i++)
for(int j = 1;j<=i;j++)
d[i]+=d[j-1]*d[i-j];
//输出验证
// for(int i=0;i<=n;i++)
// cout<<"d["<<i<<"]: "<<d[i]<<endl;
return d[n];
}
};
解法二:卡特兰数
class Solution {
public:
int numTrees(int n) {
long long C = 1;
for (int i = 0; i < n; ++i) {
C = C * 2 * (2 * i + 1) / (i + 2);
}
return (int)C;
}
};