题目:括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
链接:https://leetcode-cn.com/problems/bracket-lcci
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> record;
if(n==0) return record;
dfs(record,"(",1,0,n);
return record;
}
void dfs(vector<string> &record,string str,int left_num,int right_num,int n)
{
if((left_num+right_num)==n*2)
{
record.push_back(str);
return ;
}
if(left_num<n) dfs(record,str+"(",left_num+1,right_num,n);
if(right_num<n&&right_num<left_num) dfs(record,str+")",left_num,right_num+1,n);
}
};