第一眼看懵,感觉这个左右括号很麻烦。放了两天。在纸上写了写,发现没想的那么难,才开始写的。
思路:
按照这个树写出了递归。结果发现存在错误组合的情况,想到了正确情况下左括号的数量>=右
括号,因为先有左才有右。
vector<string> generateParenthesis(int n) {
vector<string>ans;
string tep;
tep+='('; //第一个一定是左括号
dfs(ans,n,tep,1,0);
return ans;
}
void dfs(vector<string>& ans,int n,string tep,int left,int right){
if(tep.size()==n*2){
ans.push_back(tep);
return;
}
if(left<n&&left>=right)dfs(ans,n,tep+"(",left+1,right);//left 左括号数量
if(right<n&&left>=right)dfs(ans,n,tep+")",left,right+1);
}