59.括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例2:
输入:n = 1
输出:["()"]
提示:
- 1 <= n <= 8
代码:
class Solution {
public List<String> generateParenthesis(int n) {
//res用于存储所有有效的括号组合
List<String>res = new ArrayList<>();
//s用于存储中间括号组合
StringBuilder s = new StringBuilder();
//递归寻找有效的括号组合
dfs(0,n,n,res,s);
//返回res
return res;
}
//cnt表示左边未匹配的左括号数量,l表示还可以使用的左括号数量,r表示还可以使用的右括号数量
public void dfs(int cnt,int l,int r,List<String>res,StringBuilder s){
//如果左括号和右括号都使用完了
if(l==0&&r==0){
//将当前括号组合加入res中
res.add(s.toString());
//返回
return;
}
//如果还有左括号可以使用
if(l>0){
//当前组合加入左括号
s.append("(");
//左边未匹配的左括号数量+1,还可以使用的左括号数量-1
dfs(cnt+1,l-1,r,res,s);
//回溯,移除左括号
s.deleteCharAt(s.length()-1);
}
//如果还有右括号可以使用
if(r>0&&cnt>0){
//当前组合加入右括号
s.append(")");
//左边未匹配的左括号数量-1,还可以使用的右括号数量-1
dfs(cnt-1,l,r-1,res,s);
//回溯,移除右括号
s.deleteCharAt(s.length()-1);
}
}
}

浙公网安备 33010602011771号