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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
这道题目的核心就是怎么样回溯,一般这类型的题目都可以利用递归来进行解决。递归函数的设计是:1.自身函数之间的关系 2.终止条件。
思路一:本题的递归设计比较有意思,因为由两个变量来控制。
代码如下:
class Solution {
public:
void addP(vector<string>& result,string str,int n,int m)
{
if(n==0 && m==0)
{
result.push_back(str);
return;
}
if(m>0) addP(result,str+"(",n+1,m-1);
if(n>0) addP(result,str+")",n-1,m);
}
vector<string> generateParenthesis(int n) {
vector<string> result;
addP(result,"",0,n);
return result;
}
};