题目描述:
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
题源:https://leetcode-cn.com/problems/bracket-lcci/
代码:
class Solution { vector<string> ans; public: void dfs(string s,int l, int r) { if(l==0 && r==0) { ans.push_back(s); return; } if(l>0) dfs(s+‘(‘,l-1,r); //如果可以插入做左括号 if(l<r) dfs(s+‘)‘,l,r-1); // 右括号数量不能>=左括号,不合法 } vector<string> generateParenthesis(int n) { dfs("",n,n); return ans; } };