题目原型:
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
分析:此类排列组合类题目,有时候适合用递归解决。
看了代码后一目了然:
/**
* 递归产生组合
* @param list 集合
* @param n 括号的对数
* @param left 左括号的个数
* @param right 右括号的个数
* @param tempStr 临时变量,储存括号
*/
public void getAnswer(ArrayList<String> list,int n,int left,int right,String tempStr)
{
if(left<right)
return;
if(left+right==n*2)
{
if(left==right)
{
list.add(tempStr);
}
return;
}
getAnswer(list, n, left+1, right, tempStr+"(");
getAnswer(list, n, left, right+1, tempStr+")");
}
public ArrayList<String> generateParenthesis(int n)
{
ArrayList<String> list = new ArrayList<String>();
getAnswer(list, n, 0, 0, "");
return list;
}