牛客网算法学习笔记-卡特兰数相关

原创 2016年06月01日 16:54:08

说实话,卡特兰数我自己基本没什么深刻的理解,只能做一些相关的简单的题目而已。所以这里只记录题目和代码。


n个数进出栈的顺序有多少种?假设栈的容量无限大。

给定一个整数n,请返回所求的进出栈顺序个数。保证结果在int范围内。

测试样例:
1
返回:1


2n个人排队买票,n个人拿5块钱,n个人拿10块钱,票价是5块钱1张,每个人买一张票,售票员手里没有零钱,问有多少种排队方法让售票员可以顺利卖票。

给定一个整数n,请返回所求的排队方案个数。保证结果在int范围内。

测试样例:
1
返回:1

求n个无差别的节点构成的二叉树有多少种不同的结构?

给定一个整数n,请返回不同结构的二叉树的个数。保证结果在int范围内。

测试样例:
1
返回:1


class Stack {
public:
    int countWays(int n) {
        // write code here
        int result = 1;
        for(int i = n+1;i<=2*n;i++){
            result = result *i;
        }
        for(int i = 1;i<=n;i++){
            result = result/i;
        }
        result = result /(n+1);
        return result;
    }
};


12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

给定一个偶数n,请返回所求的排列方式个数。保证结果在int范围内。

测试样例:
1
返回:1
不会写。没看出是卡特兰数

别人家的代码:

class HighAndShort {
public:
    int countWays(int n) {
        // write code here
        if(n%2)
            n--;
        int res=1;
        for(int i=n;i>n/2;i--)
            res*=i;
        for(int i=n/2;i>1;i-- )
            res/=i;
        return res/(n/2+1);
    }
};


有n个信封,包含n封信,现在把信拿出来,再装回去,要求每封信不能装回它原来的信封,问有多少种装法?

给定一个整数n,请返回装发个数,为了防止溢出,请返回结果Mod 1000000007的值。保证n的大小小于等于300。

测试样例:
2
返回:1
class CombineByMistake {
public:
    int countWays(int n) {
        // write code here
        long a = 0;
        long b = 1;
        if(n==1)
            return a;
        if(n==2)
            return b;
        int result;
        for(int i = 3;i<=n;i++){
            result = (i - 1)*(a + b) %1000000007;
            a = b;
            b = result;
        }
        return result;


    }
};

相关文章推荐

牛客网笔试题

昨天算法今天后端,又水了两把笔试…在这里把待解决的编程题整理一下,端午回来了填坑。三角形个数如图所示,N层对应的三角形个数为?(除了使用递推公式,感觉应该用递归的方法,没时间写了…) ans ...

安卓小渣渣的成长之路2.0——使用WebView显示网络视图

本文章内容过于浅显,不涉及较深的内容 贴代码:

java object默认的基本方法

构造方法摘要Object()方法摘要protected Object clone() //创建并返回此对象的一个副本。boolean equals(Object obj) //指示某个其他对象是否与此...

回溯法打印卡特兰数问题--牛客编程题解题记录

今天在牛客上做到一个题,用到了卡特兰数的知识。 那道题我会单独写一篇博客,这里把其中一个子问题抽象出来,给出代码方案: 给了长度为2n的顺序数列,先将数列分成两排,要求第一排的每一列小于等于对应的...

卡特兰数相关问题总结

一、什么是Catalan数 说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是 递推公式是 C(n) = C(1)*C(n-1) + C(2...

卡特兰数 相关问题 hdu 5184 Brackets

题解: 当n为奇数的时候答案是0。 先判断字符串的前面是否符合括号匹配,即对于任何前缀左括号个数>=右括号个数。 设左括号个数为a右括号个数为b, m=n/2,问题可以转化为在平面中从座标(a,b)...

算法-数论-卡特兰数

卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。 令h(0)=1,h(1)=1,catalan数满足递推式: h(n)=...
  • baalhuo
  • baalhuo
  • 2015年08月29日 00:41
  • 537

(资料)Catalan(卡特兰数)的算法分析与应用

什么是Catalan数说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是我们从中取出的就叫做第n个Catalan数,前几个Catalan数是:1, 1...

Lightoj 1170 卡特兰数+扩展欧几里得算法

1.预处理先求出1e10范围内的所有完美的数 2.一个有n个值的二叉排序树的个数:    先将这n个数排序,然后 可以选第1个数为根,那么就变成了  构造 0个节点的左子树 与 n-1个节点的右子...

算法之卡特兰数

一,问题描述给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列?比如入栈序列为:1 2 3 ,则出栈序列一共有五种,分别如下:1 2 3、1 3 2、2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:牛客网算法学习笔记-卡特兰数相关
举报原因:
原因补充:

(最多只允许输入30个字)