原题链接:牛客网
原题:
若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列?
答案为42
该题为组合数学问题,有一段解释我觉得说得很好:
首先,我们设 f(n)=序列个数为n的出栈序列种数。(我们假定,最后出栈的元素为k,显然,k取不同值时的情况是相互独立的,也就是求出每种k最后出栈的情况数后可用加法原则,由于k最后出栈,因此,在k入栈之前,比k小的值均出栈,此处情况有f(k-1)种,而之后比k大的值入栈,且都在k之前出栈,因此有f(n-k)种方式,由于比k小和比k大的值入栈出栈情况是相互独立的,此处可用乘法原则, f(n-k)*f(k-1)种,求和便是Catalan递归式,得到的结果便是卡特兰数。
卡特兰数原理:
设h(n)为catalan数的第n项,令h(0)=1,h(1)=1,catalan数满足递推式:
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)*h(0) (n≥2)
例如:h(2)=h(0)h(1)+h(1)h(0)=11+11=2
h(3)=h(0)h(2)+h(1)h(1)+h(2)h(0)=12+11+21=5
重点来了:n从0-10对应的卡特兰数
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796
题目对应n=5的卡特兰数,为42
标签:11,出栈,原题,42,序列,进栈,卡特兰 来源: https://blog.csdn.net/m0_51599146/article/details/120627534
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。