题目:
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
来源:
解题思路:回溯
定义2个变量left和right,left记录放置'('的数量,right记录放置')'的数量。
- 递归终止条件:左括号必定先放完,所以右括号放完时结束
- 递归调用条件:根据left和right当前情况,判断下一个字符的可能情况
public:
vector<string> result;
string path;
vector<string> generateParenthesis(int n) {
back(n, 0, 0);
return result;
}
void back(int n, int lef