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 + "(");
}
}
本文介绍了一种使用递归方法生成所有长度为n对的合法括号组合的方法,包括了核心逻辑分析和代码实现。
308

被折叠的 条评论
为什么被折叠?



