深搜一:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
string path;
dfs(n,result,path,0,0);
return result;
}
void dfs(int n,vector<string> &result,string &path,int l,int r)
{
if(l==n)
{
result.push_back(path+string(n-r,')'));
return;
}
//左括号
path.push_back('(');
dfs(n,result,path,l+1,r);
path.pop_back();
//右括号
if(l>r)
{
path.push_back(')');
dfs(n,result,path,l,r+1);
path.pop_back();
}
}
};
深搜二:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
dfs(n,result,"",0,0);
return result;
}
void dfs(int n,vector<string> &result,string path,int l,int r)
{
if(l==n)
{
result.push_back(path.append(n-r,')'));
return;
}
//左括号
dfs(n,result,path+'(',l+1,r);
//右括号
if(l>r)dfs(n,result,path+')',l,r+1);
}
};