难度:中等
频次:62
题目:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解题思路:DFS
DFS注意
- 构造一棵树,只要遍历就行了
- 递归结束条件是 left right(每次遍历一个节点就为0) 的值为0
- 需要剪枝,条件是需要left>right[因为这道题的前提就是,一个字符串里”(“必须要比“)”多,才有机会合成,不然你剩下一堆的”("没地方用]
- 每次遍历都需要判断条件,只有left和right>0才有必要进行相应的遍历
代码
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res=new ArrayList<String>();
dfs("",n,n,res);
return res;
}
public void dfs(String s,int left,int right,List<String> res){
if(left==0&&right==0) {
res.add(s);
return;
}
if(left>right){
return;
}
//left、right必须>0,不然会走一些乱七八糟的遍历
if(left>0){
dfs(s+"(",left-1,right,res);
}
if(right>0){
dfs(s+")",left,right-1,res);
}
}
}