[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];
  }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值