一、题目
二、代码
class Solution
{
public int numTrees(int n)
{
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1 ;
int i,j;
for(i=2;i<=n;i++)
{
for(j=1;j<=i;j++)
{
dp[i] += dp[j-1]*dp[i-j];
}
}
return dp[n];
}
}
三、运行结果
四、附录
二刷
class Solution
{
//留一个当根节点 剩下来排布到左右相乘
public int numTrees(int n)
{
int i,j;
int[] res = new int[n+1];
res[0] = 1;
res[1] = 1;
for(i=2;i<=n;i++)
{
for(j=0;j<=i-1;j++)
{
res[i] = res[i] + res[i-1-j]*res[j];
}
}
return res[n];
}
}