给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:
设定一个左括号剩余可放入数,一个右括号剩余可放入数
在(右括号剩余可放入数 - 1 >= 左括号剩余可放入数)的前提下,不断往string中放入括号即可
class Solution {
public:
void get_parenthesis(int left, int right, vector<string> &res, string &temp, int loc) {
if (loc == temp.size()) {
res.push_back(temp);
}
if (left > 0) {
temp[loc] = '(';
get_parenthesis(left-1, right, res, temp, loc+1);
if (right - 1 >= left){
temp[loc] = ')';
get_parenthesis(left, right-1, res, temp, loc+1);
}
}
else if (right > 0){
temp[loc] = ')';
get_parenthesis(left, right-1, res, temp, loc+1);
}
}
vector<string> generateParenthesis(int n) {
vector<string> res;
string s;
s.resize(2*n);
get_parenthesis(n, n, res, s, 0);
return res;
}
};