Leetcode96
1.问题描述
2.解决方案
1.本题采用动态规划,说实话不看题解是不可能想出来的,思路下面有解释,我们更多关注本题做完的帮助
2.第一就是记住,这种思路dp[i]依然就是答案,即以i个节点的二叉搜索树的数量,然后进行状态转移,状态转移时需要对j进行遍历
class Solution {
public int numTrees(int n) {
//1.初始化
int[] dp=new int[n+1];
//2.边界
dp[0]=1;
dp[1]=1;
//3.遍历
for (int i = 2; i <= n; i++) {
//求dp[i] 需要遍历j [1..i] 即以j=1...i为头节点的二叉搜索树的个数
for (int j = 1; j <=i ; j++) {
dp[i]+=dp[j-1]*dp[i-j];
}
}
return dp[n];
}
}