题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
有效括号组合需满足:左括号必须以正确的顺序闭合。
解题思路
左边的括号数量一定要大于有边括号的数量才能保证是有效的 括号组合。直接dfs即可
代码
class Solution {
List<String> res = new ArrayList<>();
public List<String> generateParenthesis(int n) {
dfs("",n,n);
return res;
}
public void dfs(String str,int l,int r){
if (l == 0 && r == 0){
res.add(str);
return ;
}
if (l == r){
dfs(str+"(",l-1,r);
}else if(l < r){//如果左边小于右边 ,说明"("的数量比")"多。添加左边的和右边都可以
if (l > 0){
dfs(str+"(",l-1,r);
}
dfs(str+")",l,r-1);
}
}
}