LeetCode 算法22 括号生成
题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解题方法 回溯法
如果左括号数量不大于 nn,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。
class Solution {
public:
void backtrack(vector<string> &res, string combination, int n, int le1, int le2){
if(le1 + le2 == n * 2){
res.push_back(combination);
}
if(le1 < n){
combination.push_back('(');
backtrack(res, combination, n, le1 + 1, le2);
combination.pop_back();
}
if(le2 < le1){
combination.push_back(')');
backtrack(res, combination, n, le1, le2 + 1);
combination.pop_back();
}
}
vector<string> generateParenthesis(int n) {
vector<string> res;
string combination;
backtrack(res, combination, n, 0 , 0);
return res;
}
};