第一次尝试:
//递归超时了
int F(int n) {
if (n == 0) {
return 1;
}
else if (n == 1) {
return 1;
}
else {
int res = 0;
for (int i = 1; i < n+1; i++) {
res += F(i - 1) * F(n - i);
//printf("%d\n", res);
}
return res;
}
return 0;
}
第二次尝试 抄一下题解
//改进一下,重复计算只算一次
int numTrees(int n) {
vector<int> F_dir(n + 1, 0);
F_dir[0] = 1;
F_dir[1] = 1;
for (int i = 2; i < n + 1; i++) {//所有F_dir
for (int j = 1; j < i + 1; j++) {
F_dir[i] += F_dir[j - 1] * F_dir[i - j];
}
}
return *(F_dir.end()-1);
}
蜜汁0ms 假的