class Solution {
public int numTrees(int n) {
int[] G = new int[n + 1];
G[0] = 1;
G[1] = 1;
for(int i = 2; i <= n; i++){//总共n+1个元素
for(int j = 1; j <= i; j++){//j为root,i这里相当于n,G[2], G[3]...才能一直求到G[n]
G[i] += G[j - 1] * G[i - j];//i = j的情况为右边是空子树,只看数量,数量相同,组合种类就相同
}
}
return G[n];
}
}


本文介绍了一种计算不同形态的二叉搜索树数量的方法。通过动态规划的方式,使用一个整型数组来存储从1到n的每个数值作为根节点时,可能形成的二叉搜索树的数量。

被折叠的 条评论
为什么被折叠?



