[leet code] Generate Parentheses

  • Post author:
  • Post category:其他


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:


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

============

Analysis:

Use recursive approach.  For each recursive call, there are 2 cases:

1. Number of “(” larger then number of “)” -> in this case, we can add either “(” or “)” in current recursive call

2. Number of “(” equal to number of “)” -> in this case, only “(” can be added.

Note that there is no case of number of “(” less then number of “)”, because when they are equal, we always add “(” (case 2).

Recursive function exit:

when number of “(” reached n, then just add remaining “)” and return.

public class Solution {
    public ArrayList<String> generateParenthesis(int n) {
        ArrayList<String> res = new ArrayList<String>();
        if(n==0) {
            res.add("");
            return res;
        }
        
        helper(n,0,0,res,"");
        return res;
    }
    
    public void helper(int n, int left, int right, ArrayList<String> res, String temp){
        // exit: all ( appeared
        if(left == n){
            for (int i=0; i<n-right; i++) 
                temp = temp + ")";
            res.add(temp);
            return;
        }
        
        // case1: number of ( > number of )
        if(left>right){
            helper(n, left+1, right, res, temp + "(");
            helper(n, left, right+1, res, temp + ")");
        }
        
        // case2: number of ( == number of )
        else helper(n, left+1, right, res, temp + "(");
    }
}



版权声明:本文为u010500263原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。