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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
题意:打印n对括号能够形成的所有合法括号。
分析:合法括号即从前向后遍历时,遇到左括号加一,遇到右括号减一,在任何位置count值必然大于等于一。因此,可以维持一个count值和record数组以及index,count值表示从0到index的和,record记录前index位置的括号情况,index就是下标。
代码如下:
class Solution {
public List<String> generateParenthesis(int n) {
List<String> result=new ArrayList<String>();
makeString(result,0,new int[2*n],0,n);
return result;
}
public void makeString(List<String> result,int count,int[]record,int index,int n){
if(index>=2*n-1&&count==0){
StringBuilder s=new StringBuilder();
for(int i=0;i<2*n;i++)
if(record[i]==1)
s.append("(");
else
s.append(")");
result.add(s.toString());
}
if(index<2*n){
record[index]=1;
makeString(result,count+1,record,index+1,n);
if(count>0){
record[index]=-1;
makeString(result,count-1,record,index+1,n);
}
}
}
}