Generate Parentheses Java

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值