数据结构的一道题

偶然看到的一个小题,差点被忽略了,题目大概是这样的:
a,b,c,三个元素依次入栈,问有多少种出栈顺序?
意思是入栈的顺序必须是a,b,c,我是这样想的,分三种情况,
1:a先出栈,即a入栈后就出栈,然后可以b入栈,出栈,c入栈,出栈,
那么出栈顺序就是a,b,c;
或者b入栈,c入栈,c出栈,b出栈,顺序为a,c,b
2:b先出栈,出栈顺序可以是b,c,a和b,a,c
3:c先出栈,由于入栈必须是a,b,c,所以出栈只能是c,b,a
所以这类题中三个元素有5种出栈顺序
如果把问题延伸呢?4个呢?5个呢?n个呢?
我搜了下,有些人真是高智商,https://en.wikipedia.org/wiki/Catalan_number这是他的详细解答

假设n个元素依次进栈,出栈的顺序有f(n)中,很容易得到:
f(1)=1;
f(2)=2;
f(3)=5;
为了方便,设f(0)=1;
结论就是:
f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+……+f(n-1)*f(0);
那么这么算就很简单了(为什么这么做我就不去探究了,也探究不出来,哪位有兴趣可以自己去试试),f(4)=f(0)*f(3)+f(1)*f(2)+f(2)*f(1)+f(3)*f(0)=5+2+2+5=14

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值