标题:96. 不同的二叉搜索树
难度:中等
天数:第11天,第2/2题
示例 1:
示例 2:
提示:
1 <= n <= 19
为了便于理解,可查看最后解题思路:
class Solution {
//动态规划 第 11 天 2/2
public int numTrees(int n) {
int[] dp = new int[n+1];
//dp[0]赋值1 防止左子树*右子树 = 0
dp[0] = 1;
for(int i = 1 ; i <= n; i++){
//dp[i] 1-i(j)挨个当头部节点的和
for(int j = 1; j <= i;j++){
//元素j为头部节点 搜索树数量 = 左子树搜索树数量 * 右子树搜索树数量
//j-1是j左子树搜索树的数量,i-j 是j 到右侧i 搜索树数量
dp[i] += dp[j-1] * dp[i-j];
}
}
return dp[n];
}
}
------以下思路全部来自力扣大腿<代码随想录>的思路—
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i] += dp[j - 1] * dp[i - j];
}
}
来自力扣大腿<代码随想录>的思路