class Solution {
void backtrack(vector<string>& ans,string& cur,int open,int close,int n){
if(cur.size()==n*2){ //cur里面已经有n对括号
ans.emplace_back(cur);
return;
}
if(open<n){
cur.push_back('(');
backtrack(ans,cur,open+1,close,n); //cur里面已经有open+1个左括号
cur.pop_back();
}
if(close<open){
cur.push_back(')');
backtrack(ans,cur,open,close+1,n);
cur.pop_back(); //cur前面部分相同情况下,此位为(和)的情况都已经添加进ans,回溯改变上一个括号的情形
}
}
public:
vector<string> generateParenthesis(int n) {
vector<string>res;
string tmp;
backtrack(res,tmp,0,0,n);
return res;
}
};
22. 括号生成 (DFS+剪枝)
于 2022-05-20 19:28:21 首次发布