卡特兰数(Catalan number)-力扣96

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

力扣96

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

示例:

输入: 3

输出: 5

解释:

给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

?


一种解释

首先注意,dp [k]表示从1 ... k构建的BST树的数量;

那么假设我们有前4棵树的数量:dp [1] = 1,dp [2] = 2,dp [3] = 5,dp [4] = 14,我们如何得到dp [5]这四个数字是这里的核心问题。

基本的过程是:构建一棵树,我们需要选择一个根节点,然后我们需要知道在该节点下可以保留多少个可能的左子树和右子树,最后将它们相乘。

构建一个包含{1,2,3,4,5}的树。首先我们选择1作为根,对于左边的子树,没有;对于正确的子树,我们需要计算从{2,3,4,5}构建的树有多少棵,显然它与{1,2,3,4}的数相同。因此,根据“1”选取的树的总数为dp [0] * dp [4] = 14(假设dp [0] = 1)。同样,根2具有dp [1] * dp [3] = 5个树。根3具有dp [2] * dp [2] = 4,根4具有dp [3] * dp [1] = 5并且根5具有dp [0] * dp [4] = 14。完成。


一种解释

二叉搜索树的数量可视化为

二叉搜索树的数量=

(根可以选择的路数)*

(左二叉搜索子树的数量)*

(右二叉搜索子树的数量)

现在,由于在BST中存在“n”个节点并且,所以对于n个元素,BST的数量由C(n)表示。

我们可以递归地查找BST的数量:

选择1作为根,左子树上没有元素。 右子树上有n-1个元素。

选择2作为根,左子树上的1个元素。 右子树上的n-2个元素。

选择3作为根,左侧子树选择2个元素。 右子树上的n-3个元素。

同样,对于第i个元素作为根,左边的i-1元素和右边的n-i。

这些子树也是BST,所以我们可以这样写:

C(n) = C(0)C(n-1) + C(1)C(n-2) + .....+ C(i-1)C(n-i)..... + C(n-1)C(0)

C(0)= 1,因为只有一种方法可以生成0节点的BST。 C(1)= 1,因为有一个方法可以使1个节点的BST生成。

?


代码

 public int numTrees(int n) {
    int [] dp = new int[n+1];
    dp[0]= 1;
    dp[1] = 1;
    for(int level = 2; level <=n; level++)
        for(int root = 1; root<=level; root++)
            dp[level] += dp[level-root]*dp[root-1];
    return dp[n];
}

原文地址:https://www.cnblogs.com/10zhang/p/ka-te-lan-shu-Catalan-numberli-kou96.html

时间: 2024-08-30 01:35:07

卡特兰数(Catalan number)-力扣96的相关文章

[LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析

本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 举个栗子,给定 n = 3, 共有 5 个. 1 3 3 2 1 \ / / / \ 3 2 1 1

浅谈卡特兰数(Catalan number)的原理和应用

一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[n]=Σc[k]*c[n-k-1],边界条件为c[0]=1; 其递推解为c[n]=C(2n,n)/(n+1),即卡特兰数的通项公式,其中C表示数的组合: (2)另类递推式 c[n]=c[n-1](4n-2)/(n+1),边界条件为c[0]=1; 其递推解为c[n]=C(2n,n)-C(2n,n-1)

卡特兰数(Catalan Number) 算法、数论 组合~

Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为(OEIS中的数列A000108):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190

卡特兰数(Catalan)及其应用

卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项为 : C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=16796 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 26

卡特兰数-Catalan数

卡特兰数的含义: 说到卡特兰数,就不得不提及卡特兰数序列,卡特兰数序列是一个整数序列,其通项公式是我们从中取出的就叫做第n个卡特兰数数,前几个卡特兰数数是:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, -运用卡特兰数可以解决许多实际问题上的计数问题 卡特兰数的几个基本性质以及变形公式:(提示括号一上n一下m表示n中选择m个的组合数) 1.-->> 2. 3. 4. 以上的推导公式为其基本性质总结,

卡特兰数 (Catalan)

卡特兰数:(是一个在计数问题中出现的数列) 一般项公式: 1.         或       2.   递归公式: 1.  或 2. 注:全部可推导. (性质:Cn为奇数时,必然出现在奇数项 2k-1. (除去第 0 项)) 应用举例: 1. 连乘的 n 个数加括号. 答案: Cn-1 2. 一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?  答案:Cn 引申1:入栈看作 1 操作, 出栈看作 0 操作,则整个序列入栈出栈后从左到右遍历 1 和 0 组成的序列,1 的个

出栈顺序 与 卡特兰数(Catalan)的关系

一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3  ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2.2 1 3.2 3 1.3 2 1 二,问题分析 先介绍几个规律: ①对于出栈序列中的每一个数字,在它后面的.比它小的所有数字,一定是按递减顺序排列的. 比如入栈顺序为:1 2 3 4. 出栈顺序:4 3 2 1是合法的,对于数字 4 而言,比它小的后面的数字是:3 2 1,且这个顺序是递减顺序.

Catalan number (卡特兰数)

卡特兰数非常经典,很多现实的问题都是卡特兰数,如合法的入栈出栈序列有多少种就是卡特兰数,为什么呢?我们可以把0看成入栈操作,1看成出栈操作,即0的累计个数不小于1的排列有多少种.还有很多其他的问题都是卡特兰数,如二叉树的个数,有序树的个数,多边形分成三角形的个数等. 卡特兰数的通项是c(2n, n)/(n+1). 2017年百度之星资格赛的最后一题就是用(卡特兰数+分块打表)来解决的. http://bestcoder.hdu.edu.cn/contests/contest_showproble

卡特兰数(Catalan)

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796. 通项:f(n) = f(0)*f(n-1) + f(1)*f(n-2) + .......+ f(n-2)*f(1) + f(n-1)*f(0) n>=2 f(n)=f(n-1)*(4n-2)/(n+1) 应用场景: