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

posted @ 2020-06-27 12:23  __rookie  阅读(132)  评论(0编辑  收藏  举报