给定 n 对括号,编写一个函数来生成格式正确的括号的所有组合。
例如,给定 n = 3,解集是:
“((()))”,“(()())”,“(())()”,“()(())”,“()()()”
解题思路:
- 此类问题首先应该想到的是用递归的方法
- 用 left 和 right 来表示剩下的左右括号,如果剩下的左括号大于右括号,则无效
代码如下:
public ArrayList<String> generateParenthesis(int n) {
ArrayList<String> res = new ArrayList<String>();
helper(n, n, "", res);
return res;
}
void helper(int left, int right, String out, List<String> res) {
if (left < 0 || right < 0 || left > right) return;
if (left == 0 && right == 0) {
res.add(out);
return;
}
helper(left - 1, right, out + "(", res);
helper(left, right - 1, out + ")", res);
}