码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode#22. Generate Parentheses

时间:2018-09-29 13:00:31      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:code   gen   leetcode   res   begin   int   turn   组合   ++   

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"]

public:
/*
找左括号,每找到一个左括号,就在左括号后面加一个完整的括号(),最后再在字符串开头加一个(),就形成了所有的情况
()-> ()() (())->(())(),()(()),()()()->
*/
    vector<string> generateParenthesis(int n)
    {
        if(n==0) return {};
        if(n==1) return {"()"};
        vector<string> result{"()"};
        generateParenthesis(result,n-1);

        return result;
    }

    void generateParenthesis(vector<string>& vec,int n)
    {
        if(n==0) return;
        vector<string> result;
        result.reserve(vec.size()*3);
        for(int i=0;i!=vec.size();++i)
        {
            result.push_back("()"+vec[i]);
            //每个元素,都要找"(",
            for (int j = 0; j < vec[i].size(); ++j)//避免使用迭代器,会失效
                if (vec[i][j] == ‘(‘) 
                {
                    vec[i].insert(vec[i].begin() + j + 1, ‘(‘);
                    vec[i].insert(vec[i].begin() + j + 2, ‘)‘);
                    result.push_back(vec[i]);
                    vec[i].erase(vec[i].begin() + j + 1, vec[i].begin() + j + 3);
                }
        }
        sort(result.begin(),result.end());
        result.erase(unique(result.begin(),result.end()),result.end());
        vec=result;
        generateParenthesis(vec,n-1);
    }
};

leetcode#22. Generate Parentheses

标签:code   gen   leetcode   res   begin   int   turn   组合   ++   

原文地址:https://www.cnblogs.com/lsaejn/p/9723033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!