为什么把 dp[1]=1和dp[2]=2;删除,然后for循环第一层从i=1开始就可以,但是下面那样的代码就过不了?
class Solution {
public:
int numTrees(int n)
{
vector<int>dp(n+1);//dp[i]表示i个节点有dp[i]种二叉搜索树
dp[0]=1;
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++) //i表示有i个节点,因为要从一个节点开始累计,后面的节点要用到前面的节点
{
for(int j=1;j<=i;j++) //j表示,这i个节点,以j为头节点
{
dp[i]=dp[i]+dp[j-1]*dp[i-j];
}
}
return dp[n];
}
};