//回溯法解决
class Solution {
public:
vector<string>results; //结果集
string s; //字符串
void backtracking(int open,int close,int n)
{
if( s.size() == n*2 ) //判断是否是两倍关系,因为一个(对应一个)
{
results.push_back(s); //满足条件压入results中
return ;
}
if(open<n)
{
s.push_back('('); //把左括号压入
backtracking(open+1,close,n); //回溯 相当于确定树的节点位置,往下一个节点走
s.pop_back(); //前面的那个经过一整趟回溯之后,在弹出
}
if(close<open)
{
s.push_back(')');
backtracking(open,close+1,n);//回溯 相当于确定树的节点位置,往下一个节点走
s.pop_back();
}
}
vector<string> generateParenthesis(int n) {
results.clear();
s.clear();
backtracking(0,0,n);
return results;
};
};