码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode22:括号生成

时间:2020-06-27 13:35:32      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:auto   设计   输入   back   回溯法   数字   for   ack   pre   

数字 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

LeetCode22:括号生成

标签:auto   设计   输入   back   回溯法   数字   for   ack   pre   

原文地址:https://www.cnblogs.com/rookiez/p/13197958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!