关于算法题栈序列的思考:有N个数的序列,共有多少种出栈顺序

算法的本质其实是对卡特兰数的应用方面的考察 有兴趣的朋友可以百度了解一下。

这道题的核心思想就是 
设最小的数为1 设x为最后一个出栈的
则可得出另外两类数字
一类是比x大的数字 有n-x个
另一类是比x小的数字 有x-1个
因为两类数字的出栈顺序相互影响
故采用组合乘法原理
即f[x]=f[n-x]*f[x-1]
因为每一个数都要出栈
所以可得总出栈顺序为:f[n]=f[0]*f[n-1]+f[1]*f[n-2]+....+f[n-1]*f[0]
可得以下python算法

N=int(input())
listA=[0 for i in range(N+1)]
listA[0]=1
listA[1]=1
for i in range(2,N+1):
    for p in range(i):
        listA[i]+=listA[p]*listA[i-1-p]
print(listA[N])

欢迎各位小伙伴留言探讨。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值