卡特兰数,例如对于n个进栈元素,有多少种出栈顺序,就可以用卡特兰数来求,公式为
1
n
+
1
C
n
m
=
1
n
+
1
A
n
m
A
m
m
\dfrac{1}{n+1}C_{n}^m =\dfrac{1}{n+1} \dfrac{A_{n}^m}{A_{m}^m}
n+11Cnm=n+11AmmAnm,例如n = 3时,有
1
4
∗
6
∗
5
∗
4
3
∗
2
∗
1
=
5
\dfrac{1}{4}*\dfrac{6*5*4}{3*2*1} = 5
41∗3∗2∗16∗5∗4=5种出栈顺序
A
n
m
=
A_{n}^m =
Anm=从n开始从大往小,m个数相乘
C
n
m
=
A
n
m
A
m
m
C_{n}^m = \dfrac{A_{n}^m}{A_{m}^m}
Cnm=AmmAnm
例如
C
2
n
n
=
A
2
n
m
A
n
n
C_{2n}^n = \dfrac{A_{2n}^m}{A_{n}^n}
C2nn=AnnA2nm
例如n = 3时,
C
2
n
n
=
C
6
3
=
A
6
3
A
3
3
=
6
∗
5
∗
4
3
∗
2
∗
1
=
20
C_{2n}^n = C_{6}^3 = \dfrac{A_{6}^3}{A_{3}^3} = \dfrac{6*5*4}{3*2*1} = 20
C2nn=C63=A33A63=3∗2∗16∗5∗4=20
解题思路:时间复杂度O(
n
∗
n
的卡特兰数
n*n的卡特兰数
n∗n的卡特兰数),对每一个结点作为根结点的枚举,都需要n的卡特兰数的时间复杂度,因为它的过程和不同出栈顺序一样。空间复杂度O(
n
∗
n
的卡特兰数
n*n的卡特兰数
n∗n的卡特兰数)