leetcode#22. Generate Parentheses
阿新 • • 發佈:2018-09-29
rate gin != lee nth 可能 tco leetcode generate
給出 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