题意:
题解:
确定状态方程
dp[i]=dp[i]*dp[n-i];
代码转化
//状态方程为dp[i]=dp[i]*dp[n-i];
//演变...
//dp[i]+=dp[j]*dp[i-j];
//在两个for循环下 j会在i范围下 逐渐增加 而不超过i
//所以 在内循环 递增j的基础下 得到当前dp【i】的值。
class Solution {
public int numTrees(int n) {
int[] dp=new int[n+1];
dp[0]=1;
//g[i]=f[i]*f[n-i];
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
dp[i]+=dp[j-1]*dp[i-j];
}
}
//状态方程为dp[i]=dp[i]*dp[n-i];
//演变...
//dp[i]+=dp[j]*dp[i-j];
//在两个for循环下 j会在i范围下 逐渐增加 而不超过i
//所以 在内循环 递增j的基础下 得到当前dp【i】的值。
return dp[n];
}
}