22. Generate Parentheses
1.深度优先(回溯)
public static void dfs(String s,int left,int right,List<String> res){
if(left==0&&right==0){
res.add(s);
return ;
}
if(left>right){
return ;
}
if(left>0){
dfs(s+'(',left-1,right,res);
}
if(right>0){
dfs(s+')',left,right-1,res);
}
}
2.广度优先
static class Node{
int left;
int right;
String s;
Node(int left,int right,String s){
this.left=left;
this.right=right;
this.s=s;
}
}
public static List<String> bfs(int n){
List<String> res=new ArrayList<>();
Queue<Node> queue=new LinkedList<>();
queue.offer(new Node(0,0,""));
while(!queue.isEmpty()){
Node node=queue.poll();
if(node.left==n&&node.right==n){
res.add(node.s);
}
if(node.left<n)
queue.offer(new Node(node.left+1,node.right,node.s+'('));
if(node.right<n&&node.left>node.right)
queue.offer(new Node(node.left,node.right+1,node.s+')'));
}
return res;
}