zoukankan      html  css  js  c++  java
  • [leetcode] 96 Unique Binary Search Trees (Medium)

    原题

    字母题
    思路:
    一开始妹有一点思路,去查了二叉查找树,发现有个叫做卡特兰数的东西。

    1、求可行的二叉查找树的数量,只要满足中序遍历有序
    2、以一个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积

    3、总的数量是将以所有结点为根的可行结果累加起来。
    n = 0 时,因为空树也算一种二叉搜索树,则dp[0]=1;
    n = 1时,dp[1]=1;
    n = 2时

    dp[2] =  dp[0] * dp[1]   (1为根的情况)
    
        + dp[1] * dp[0]    (2为根的情况)
    

    n = 3时

    dp[3] =  dp[0] * dp[2]   (1为根的情况)
    
        + dp[1] * dp[1]    (2为根的情况)
    
          + dp[2] * dp[0]    (3为根的情况)
    

    写成表达式如下:
    在这里插入图片描述

    class Solution
    {
    public:
      int numTrees(int n)
      {
        if (n <= 0)
          return 0;
        int res[n + 1] = {0};
        res[0] = 1;
        res[1] = 1;
    
        for (int i = 2; i <= n; i++)
        {
          for (int j = 0; j < i; j++)
          {
            res[i] += res[i - j - 1] * res[j];
          }
        }
        return res[n];
      }
    };
    
  • 相关阅读:
    chapter4.6生成器
    chapter4.4、递归
    chapter4.3、函数执行流程
    chapter4.2、函数返回值
    直接插入排序
    打印三角型的练习
    杂记
    linux top命令
    makefile 中的 := , += ,?=
    makefile中的shell语法 || Makefile中的@
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9893419.html
Copyright © 2011-2022 走看看