深度优先遍历是硬伤,尤其是全排列,折腾了两个小时,才终于AC~
class Solution {
public:
vector<string> generateParenthesis(int n) {
int left;
left=n;
vector<string>result;
string s;
s=s+'(';
generateParenthesis(left-1,1,s,result);
return result;
}
private:
void generateParenthesis(int left, int right,string &s,vector<string>&result)
{//left是还剩下的左括号个数,right是当下在string里可以加入右括号的个数
if(right>=1&&left==0)
{
for(int j=1;j<=right;j++)
s=s+')';
result.push_back(s);
return;
}
//for(int i=1;i<=left;i++)//脑残居然加一个for循环
// {
string s1;
s1=s;
s=s+'(';
generateParenthesis(left-1,right+1,s,result);
if(right>0)
{
//s=s.substr(0,s.length()-1);
s1=s1+')';//这个地方要注意,因为递归调用之后s已经发生更改
generateParenthesis(left,right-1,s1,result);
}
// }
}
};