题目
一个合法的表达式由()包围,()可以嵌套和连接,如(())()也是合法表达式;现在有 6 对(),它们可以组成的合法表达式的个数为 132
解决
主要思路:这是一个卡特兰数列,我们可以把左括号看做1,右括号看做0,这些括号的组合就是01的排列,这里需要满足从第一个数开始的任意连续子序列中,0的个数不多于1的个数,也就是右括号的个数不多于左括号的个数。
共有几种情况?
2n个位置,从中选n个位置放左括号,其他的放右括号,共有 Cn2n 种情况。
不合法的有几种?
在任何不符合条件的序列中,找出使得0的个数超过1的个数的第一个0的位置,然后在导致并包括这个0的部分序列中,以1代替所有的0并以0代表所有的1。结果总的序列变成一个有(n+1)个1和(n-1)个0的序列。而且这个过程是可逆的,也就是说任何一个有(n+1)个1和(n-1)个0构成的序列都能反推出一个不符合条件的序列,所以不符合条件的序列个数为 Cn−12n ,
所以,合法的排列数有
Cn2n−Cn−12n=Cn2nn+1
本文参考的来源博客