描述
给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。
例如,给出n=3,解集为:
“((()))”, “(()())”, “(())()”, “()()()”, “()(())”
import java.util.ArrayList;
public class RecureBrackets {
public void recure(int left, int right, String tmp, ArrayList res, int n){
// 左右括号都使用完毕
if(left == n && right == n){
res.add(tmp);
return;
}
//使用一次左括号
if(left < n){
recure(left+1,right,tmp+"(",res,n);
}
// 使用右括号个数必须少于左括号
if(right < n && left > right){
recure(left,right+1,tmp+")",res,n);
}
}
public ArrayList<String> generateParenthesis (int n) {
ArrayList<String> res = new ArrayList<>();
recure(0,0,"",res,n);
return res;
}
public static void main(String[] args) {
}
}