难度:2
个人总结:还是有未考虑全面的地方,以及string没有pop_back这个方法吖
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
解法仍然是DFS,DFS过程中维护前面的'('的个数,保证新加入的')'一定有匹配(即前面的未匹配的'('个数不为0)
class Solution
{
public:
vector<string>ans;
int num;//'('的个数
string tmp;
void dfs(int n)//还可以放置n个字符
{
if(n == 0 && num == 0)
{
ans.push_back(tmp);
return;
}
if(n == 0) return;
if(num >= 1)
{
tmp+=')';
num--;
dfs(n-1);
tmp.erase(tmp.end()-1);
num++;
}
tmp+='(';
num++;
dfs(n-1);
tmp.erase(tmp.end()-1);
num--;
}
vector<string> generateParenthesis(int n)
{
ans.clear();
num=0;
tmp = "";
if(n<0) return ans;
dfs(2*n);
return ans;
}
};