题目描述:
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
这道题类似深搜,左括号和右括号即为两种分支,尽可能搜索所有分支的情况,同时还要满足已产生的current_result中左括号大于右括号,所以剩余右括号数目大于左括号才能添加右括号,但是只要剩余左括号数目大于0,就可以添加左括号。另外需要注意的是all_result应该是引用传参,这样才能在在findAll递归过程中修改all_result。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> all_result;
string current_result;
findAll(all_result,current_result,n,n);
return all_result;
}
void findAll(vector<string>& all_result,string current_result,int left,int right)
{
if(left==0&&right==0)
{
all_result.push_back(current_result);
return;
}
if(left>0)
{
findAll(all_result,current_result+"(",left-1,right);
}
if(left<right)
{
findAll(all_result,current_result+")",left,right-1);
}
}
};