LeetCode: 22. Generate Parentheses

来源:互联网 发布:如果南京是首都知乎 编辑:程序博客网 时间:2024/06/17 03:29

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);            }        }    }}