面试题 08.09. 括号
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bracket-lcci/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析
参考链接:简单的回溯方法
循环生成可能的括号组合后,去掉不匹配的。
left right分别表示剩余左括号 右括号的个数。(n=3 初始left=right=3)
不匹配情况:
1.剩余左 > 右
2.左为负数 或 右为负数
class Solution {
private:
vector<string> res;
string path;
void backtracking(int n, int left, int right){
if(left > right || left < 0 || right < 0){
return ;
}
if(path.size() == n * 2){
res.push_back(path);
return ;
}
path.push_back('(');
backtracking(n, left - 1, right);
path.pop_back();
path.push_back(')');
backtracking(n, left, right - 1);
path.pop_back();
}
public:
vector<string> generateParenthesis(int n) {
res.clear();
path.clear();
backtracking(n, n, n);
return res;
}
};