链接:https://leetcode-cn.com/problems/generate-parentheses
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
解法:
class Solution {
public:
void helper(int left, int right, string tmp, vector<string> &result) {
if (left == 0 && right == 0) {
result.push_back(tmp);
return;
}
if (left>right || left<0 || right<0) //左括号用的比右括号少
return ;
helper(left-1, right, tmp+'(', result);
helper(left, right-1, tmp+')', result);
}
vector<string> generateParenthesis(int n) {
vector<string>result;
helper(n,n, "", result);
return result;
}
};