我想知道是否有人可以回答我,这是针对下一个问题在回溯解决方案中生成的结果数量:
给定n对括号,编写一个函数来生成格式正确的括号的所有组合。
例如,给定n = 3,解集是:
“((()))”,“(()())”,“(())()”,“()(())”,“()()()”
stackoverflow中有一个相关的帖子:Generate balanced parentheses in java
我怀疑,如果有一个公式可以给我一些有效的括号,我可以在计算之前生成。
例如:
- f(n):
- f(1)= 1
- f(2)= 2
- f(3)= 5
等等。
谢谢。
答案 0 :(得分:4)
可以通过加泰罗尼亚数字计算包含正确匹配的n对括号的数字表达式。引用维基百科的相关link:
组合系统中存在许多计数问题,其解决方案由加泰罗尼亚数字给出...... Cn是长度为2n的Dyck字数。 Dyck字是由n个X和n Y组成的字符串,这样字符串的初始段没有比X更多的Y ...将符号X重新解释为左括号,Y作为右括号,Cn计算表达式的数量包含正确匹配的n对括号。
第n个加泰罗尼亚数字直接根据二项式系数给出: