题目:输入一个整数n,输出所有的括号组合,n组括号的组合。
eg:
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:
将当前的左括号数与右括号数组合成(x, y)的形式,将其看成是图的一个节点,如果当前结点的x > y,那么当前结点有两个相邻节点(x + 1, y)和(x, y + 1),否则只有一个相邻节点(x + 1, y),这是由于x必须大于等于y,因为当前的左括号数要比右括号数多或者等。
其实这种排列问题都可以转化为图搜问题。
这样建模成图的遍历问题就可以采用两种方式进行,深度优先与广度优先,下面是两种方法的解: