题目链接:括号生成
题目描述:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
代码:
class Solution{
int n;
char[] cur = new char[n*2];
List<String> res = new ArrayList();
solve(cur,0,res,0,0);
}
public void solve(char[] cur,int pos,List<String> res,int left,int right){
if(pos == cur.length){
//if(isOk(cur)) res.add(new String(cur));剪枝前
res.add(new String(cur));
}
if(left<(cur.length/2)){ //左括号数量一定小于N
cur[pos]= '(';
solve(cur,pos+1,res,left+1,right);
}
if(right<left){ //右括号数量一定小于左括号
cur[pos]= ')';
solve(cur,pos+1,res,left,right+1);
}
}
//判断是否合法
public boolean isOK(char[] ch){
int cnt = 0;
for(char c:ch){
if(c == '(') cnt++;
else cnt--;
}
return cnt == 0;
}