Leetcode刷题java之96. 不同的二叉搜索树

执行结果:

通过

显示详情

执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户

内存消耗 :33 MB, 在所有 Java 提交中击败了34.44%的用户

题目:

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

思路:

属于动态规划类题目,根据它的规律可以推导出递推公式。

G(n): 长度为n的序列的不同二叉搜索树个数。

F(i,n): 以i为根的不同二叉搜索树个数

扫描二维码关注公众号,回复: 8916729 查看本文章

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];
  }
}
发布了415 篇原创文章 · 获赞 434 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/104098472