22.括号生成
思路:递归
任意前缀中左括号数量一定 >= 右括号数量,因此,如果左括号数量不大于 n,我们就可以放一个左括号,来等待一个右括号来匹配 。如果右括号数量小于左括号的数量,我们就可以放一个右括号,来使一个右括号和一个左括号相匹配。这两个不冲突,都需要回溯
class Solution {
public:
vector<string>res;
vector<string> generateParenthesis(int n) {
backtrack(n,0,0,"");
return res;
}
void backtrack(int n,int left,int right,string s){
if(left==n && right==n){
res.push_back(s);
return;
}
if(left<n){
backtrack(n,left+1,right,s+"(");
}
if(right<n && left>right){
backtrack(n,left,right+1,s+")");
}
}
};