方法一: #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return string字符串vector */ void dfs(vector<string>& v, string str, string str_l,string str_r, int n) { if(str_l.size()==n && str_r.size()==n) { v.emplace_back(str); return; } if(str_l.size()<n) dfs(v,str+"(",str_l+"(",str_r,n); if(str_r.size()<n && str_l.size()>str_r.size()) dfs(v,str+")",str_l,str_r+")",n); } vector<string> generateParenthesis(int n) { // write code here vector<string> v; string str = ""; string str_l = ""; string str_r = ""; dfs(v,str,str_l,str_r,n); return v; } }; 方法二: class Solution { public: void recursion(int left, int right, string temp, vector<string> &res, int n){ //左右括号都用完了,就加入结果 if(left == n && right == n){ res.push_back(temp); return; } //使用一次左括号 if(left < n) recursion(left + 1, right, temp + "(", res, n); //使用右括号个数必须少于左括号 if(right < n && left > right) recursion(left, right + 1, temp + ")", res, n); } vector<string> generateParenthesis(int n) { //记录结果 vector<string> res; //记录每次组装的字符串 string temp; //递归 recursion(0, 0, temp, res, n); return res; } }; 方法三:将方法一中的str_l和str_2换成stack<char>类型,好像就不行了,看来stack作为形成有点像引用一样,加了元素进栈会影响后续的回溯;