您的位置:首页 > 职场人生

腾讯面试题

2020-01-15 10:34 1186 查看

给一系列的数1,2,3,,,n(有序的)和一个栈(stack),这个栈无线大,将这n个数据按照顺序放入栈中,但是随机的从栈中弹出,n=5,一共有多少中弹栈方式。

分析:卡特兰数的典型应用

 

  这是卡特兰数的典型应用,Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n)=h(1)*h(n-1) + h(2)*h(n-2)+…+h(n-1)h(1),n >= 2该递归关系的解:h(n) = C(2n,n)/(n+1),n=1,2,3…(其余C(2n,n)表示2n个中取n个的组和数)h(5) = C(10,5)/6 = 42

 

参考:这里

  参考中有应用和性质

代码:

 

1 #include <stdio.h>
2 #include <stdlib.h>
3 int GetPopNum(int n)
4 {
5     int sum = 0 ,i;
6     if(n == 0 || n == 1)
7         return 1;
8     for(i = 1;i <= n;i++)
9     {
10         sum+=GetPopNum(i-1) * GetPopNum(n-i);
11     }
12     return sum;
13 }
14 int main()
15 {
16     int k = GetPopNum(5);
17     printf("%d",k);
18 }
View Code

 

转载于:https://www.cnblogs.com/sxmcACM/p/4768721.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
asdfghjkl978564 发布了0 篇原创文章 · 获赞 0 · 访问量 1501 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: