LeetCode22:括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
采用回溯法,不断递归,在左括号数量不超过n时压入左括号,在右括号数量小于左括号时压入右括号,循环到底部就把产生的序列保存起来。
1 class Solution { 2 private: 3 int len=0; 4 vector<string> ret; 5 public: 6 vector<string> generateParenthesis(int n) { 7 vector<char> cur; 8 len=n; 9 backtrace(0,0,cur); 10 return ret; 11 } 12 13 void backtrace(int left, int right, vector<char> cur){ 14 if(left==len && right==len){ 15 string push=""; 16 for(auto it=cur.begin();it!=cur.end();it++) 17 push+=*it; 18 //cout<<push<<endl; 19 ret.push_back(push); 20 21 } 22 if(left<len){ 23 cur.push_back('('); 24 backtrace(left+1,right,cur); 25 cur.pop_back(); 26 } 27 28 if(right<len && right<left){ 29 cur.push_back(')'); 30 backtrace(left,right+1,cur); 31 cur.pop_back(); 32 } 33 return ; 34 } 35 };
其实可以直接声明string类型,string可以直接+或者push_back