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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路
这个题目是直接的,一看便知有点栈的意思,再想到递归可以实现。
1. 初始状态string s=””
2. 如果n等于0,直接返回[]
3. 递归每次判断剩余的右括号数是否大于0,若大于0,则s后加“)”,同时rightpar个数减去1,rightpar的初始值为0;
4. 同理,若左括号大于0,则s后加”(“,同时leftpar个数减去1,rightpar个数加上1.
5. 递归返回的条件,左右括号个数同时为0.
public class Solution {
public List<String> generateParenthesis(int n) {
List<String> rtn = new ArrayList<String>();
addparas(rtn,"",n,0);
return rtn;
}
//leftpar: left parenthesis count
//rightpar: right parenthesis count
private void addparas(List<String> list, String s, int leftpar, int rightpar){
if(leftpar==0 && rightpar==0){
list.add(s);
return;
}
if(rightpar>0)
addparas(list,s+")",leftpar,rightpar-1);
if(leftpar>0)
addparas(list,s+"(",leftpar-1,rightpar+1);
}
}