所有方案数均基于卡特兰数,不妨设 F(x)=(2xx)x+1F(x) = \dfrac{\tbinom{2x}{x}}{x + 1}F(x)=x+1(x2x) 来表示卡特兰数。
初始时显然答案为 F(n)F(n)F(n)。当有括号加入时,未被添加括号的位置的贡献不会超过最外层已匹配的括号。举个例子,当 ??????→(??)???????? \to \red{(}??\red{)}????????→(??)?? 时,答案就变化为 F(3)→F(1)×F(1)F(3) \to F(1) \times F (1)F(3)→F(1)×F(1)。
因此可以先将这 nnn 对括号进行编号,然后借助栈,当遇到未被添加括号的位置时,将贡献加在栈顶的括号对应的编号上,最后根据乘法原理求解即可。
时间复杂度 O(n2)O(n^2)O