深度优先遍历是硬伤,尤其是全排列,折腾了两个小时,才终于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);
}
// }
}
};
本文介绍了一种使用深度优先遍历算法解决全排列问题的方法,并通过具体实例详细展示了如何利用递归进行左右括号匹配的过程。文章分享了作者在解决这一问题时遇到的难点及最终解决方案。
119

被折叠的 条评论
为什么被折叠?



