LeetCode:Generate Parentheses

刚看到题目的时候,有点不知所措。网上很多递归的方法,看完以后是心存疑虑的。

我的想法是,n对Parentheses,假设n-1的已经得到,如何在n-1的结果中添加一对有效括号呢。

其实可以把n-1拆成k和n-1-k,这样每次在k最外面添加一队这样的到的n对的有效序列。

k值是从0取到n-1.

其实左边就是一对,2对…到n-1对.

再把左边和右边添加在一起就是一个有效对。

特殊值是k==0和k==n-1。


public class Solution {
    public ArrayList<String> generateParenthesis(int n) {
        ArrayList<String> result = new ArrayList<String>();
        if(n==0)return result;
        else if(n==1){
            result.add("()");
            return result;
        }
        for(int k=0;k<n;k++)
        {
            if(k==0)
            {
                ArrayList<String> right = generateParenthesis(n-1-k);
                int i = 0;
                while(i<right.size())
                {
                    String str = "()" + right.get(i);
                    result.add(str);
                    i++;
                }
            }
            else if(k==n-1)
            {
                ArrayList<String> left = generateParenthesis(k);
                int i = 0;
                while(i<left.size())
                {
                    String str = "(" + left.get(i) + ")";
                    result.add(str);
                    i++;
                }
               
            }
            else
            {
                ArrayList<String> left = generateParenthesis(k);
                ArrayList<String> right = generateParenthesis(n-1-k);
                for(int i=0;i<left.size();i++)
                {
                    for(int j=0;j<right.size();j++)
                    {
                        String str = "(" + left.get(i) + ")" + right.get(j);
                        result.add(str);
                    }
                }
            }
           
        }
        return result;
    }
}

posted on 2014-05-27 13:48  JessiaDing  阅读(98)  评论(0编辑  收藏  举报