方法一:DFS
public List<String> generateParenthesis(int n) {
List<String> list=new LinkedList<>();
if(n==0) return list;
dfs("",0,0,n,list);
return list;
}
public void dfs(String str,int left,int right,int n,List<String> list){
if(left==n&&right==n){
list.add(str);
return;
}
if(left<right){
return;
}
if(left<n){
dfs(str+"(",left+1,right,n,list);
}
if(right<n){
dfs(str+")",left,right+1,n,list);
}
}
方法二:BFS
public List<String> generateParenthesis(int n){
List<String> list=new LinkedList<>();
if(n==0) return list;
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){
list.add(node.res);
}
if(node.left<n){
queue.offer(new Node(node.res+"(",node.left+1,node.right));
}
if(node.right<n&&node.left>node.right)
{
queue.offer(new Node(node.res+")",node.left,node.right+1));
}
}
return list;
}
class Node{
String res;
int left;
int right;
public Node(String res,int left,int right){
this.res=res;
this.left=left;
this.right=right;
}
}