标签: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