题目描述
22. Generate Parentheses 
回溯法
class Solution {
vector<string> res;
string cur;
public:
vector<string> generateParenthesis(int n) {
backtrack(n,0,0);
return res;
}
void backtrack(int n,int left_count,int right_count){
if(cur.size() == 2*n)
{
//如果左括号数量不大于 n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。
//按照上述原则放括号,得到的括号序列就是合法的
res.push_back(cur);
return;
}
if(left_count<n){//如果左括号的数量小于n,可以放一个左括号
cur+='(';
backtrack(n,left_count+1,right_count);
cur.pop_back();
}
if(right_count< left_count){//如果右括号的数量小于左括号的数量,可以放一个右括号
cur+=')';
backtrack(n,left_count,right_count+1);
cur.pop_back();
}
}
};