题目描述:
给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。
例如,给出 n = 3,解集为:
"((()))", "(()())", "(())()", "()(())", "()()()"
解题思路:
- 列举出所有可能的情况,必用递归来求解,这题也不例外
- 我们采用 left 和 right 分别表示剩下的左括号和右括号
- 当剩下的左括号大于右括号时,此时无论怎么组合都是不合法的,所以这个条件就是递归的结束条件
- 当剩下的左括号和右括号都为 0 时,就可以将生成的字符串添加进结果集中
代码如下:
ArrayList<String> list = new ArrayList<>();
public ArrayList<String> generateParenthesis(int n) {
if(n <= 0) return list;
String sb = "";
recursion(n, n,sb);
return list;
}
// 递归函数
private void recursion(int left, int right, String sb){
// 递归结束条件
if(left < 0 || right < 0 || left > right) return;
// 具体的处理
if(left == 0 && right == 0){
list.add(sb);
return;
}
// 下一层递归
recursion(left - 1, right, sb + '(');
recursion(left, right - 1, sb + ')');
}