0
点赞
收藏
分享

微信扫一扫

力扣22 括号生成

 方法一: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;
        }
    }
举报

相关推荐

0 条评论