使用动态规划,见Leetcode题解分析,时间O(n^2),空间O(n)。代码如下:
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 j=0; j<i; ++j) {
f[i] += f[j]*f[i-j-1];
}
}
return f[n];
}
};
9.02最新代码:
class Solution {
public:
int numTrees(int n) {
vector<int> f(n+1);
f[0] = 1;
for(int i=1; i<=n; i++)
{
f[i] = 0;
for(int j=1; j<=i; j++)
{
f[i] += (f[j-1]*f[i-j]);
}
}
return f[n];
}
};