给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
给定 n = 3
, 可生成的组合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"
/*
采用递归树的思想,当左括号数大于右括号数时可以加左或者右括号,
否则只能加左括号,当左括号数达到n时,剩下全部
采用递归树的思想
left: 左括号的数量
right:右括号数量
n:括号的对数
当left == n:表示左括号已经到达最大值了,只能添加右括号
当left >= right: 表示左括号数量 小于 右括号数量,可以添加左括号 也可以添加右括号
当left < right or left >n or right >n : 非法操作
*/
public class Solution {
public ArrayList<String> generateParenthesis(int n){
ArrayList<String> res = new ArrayList<String>();
if(n<=0)return res;
String paren = "";
helper(res,paren,n,n);
return res;
}
public void helper(ArrayList<String> res,String paren,int left,int right){
if(left == 0 && right == 0){
res.add(paren);
return;
}
if(left > 0){
helper(res,paren+"(",left -1,right);
}
if(right > 0 && left < right){
helper(res,paren+")",left,right -1 );
}
}
}