执行结果:
通过
显示详情
执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗 :33 MB, 在所有 Java 提交中击败了34.44%的用户
题目:
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
思路:
属于动态规划类题目,根据它的规律可以推导出递推公式。
G(n): 长度为n
的序列的不同二叉搜索树个数。
F(i,n): 以i为根的不同二叉搜索树个数
G(n)等于从1到n对F(i,n)求和
然后F(i,n)又可以分为G(i-1)*G(n-i)
所以G(n)就等于从i到n对G(i-1)*G(n-i)求和。
代码:
public class Solution {
public int numTrees(int n) {
int[] G = new int[n+1];
//定义前两项的值
G[0] = 1;
G[1] = 1;
//外层循环代表G(n),内层循环代表求和
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
G[i] += G[j - 1] * G[i - j];
}
}
return G[n];
}
}