Generate Parentheses Java

来源:互联网 发布:three.js入门指南 pdf 编辑:程序博客网 时间:2024/05/22 13:55

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"

 

 NP-probem-> Time O(#ofResult)
    Pattern of Catalan number: form a sequence of natural
    numbers that occur in various counting problems
    Cn= (2n)! / (n+1)!n!
    Idea: Loop-Recursion method
    3 case
    Invalid case: right<left since it is not allowed
    Valid Case: recursive add ( bracket when left>0
                recursive add ) bracket when right>0
    Completed case: left==0 and right==0

public static ArrayList<String> generateParenthesis(int n) {        ArrayList<String> res=new  ArrayList<String>();        helper(n,n,"",res);        return res;    }    public static void helper(int left, int right, String s, ArrayList<String> res){        //Invalid case that #ofRight should be always less than #ofLeft        if(right<left) return;        //A completed Parentheses set Generated        if(left==0 && right==0){            res.add(s);        }        //Valid case        //recursive adding left and right Parenthesis        if(left>0)        helper(left-1,right,s+"(",res);        if(right>0)        helper(left,right-1,s+")",res);    }


0 0