算法的本质其实是对卡特兰数的应用方面的考察 有兴趣的朋友可以百度了解一下。
这道题的核心思想就是
设最小的数为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])
欢迎各位小伙伴留言探讨。