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:罗列所有可能性,考虑递归
class Solution {
public:
void rec(string cur, int left, int right, vector<string> &res){
if(left==0&&right==0) {
res.push_back(cur);
return;
}
if(left>right) return;
if(left==0&&right>0) rec(cur+")",0,right-1,res);
if(left>0){
rec(cur+"(",left-1,right,res);
rec(cur+")",left,right-1,res);
}
}
vector<string> generateParenthesis(int n) {
vector<string> res;
int left=n,right=n;
rec("(",n-1,n,res);
return res;
}
};
递归函数四个参数:当前结果,剩余左括号个数,剩余右括号个数,总结果(引用)
递归条件:
当left==0&&right==0 添加一个结果
当left>right不满足条件,直接返回
当left==0,调用递归函数一次:添加一个右括号(为了加快运行速度,可增加这个判断条件)
当left>0, 调用递归函数两次:添加一个左括号,添加一个右括号