给定一个整数,返回合法配对的括号串。比如给个3,返回"((()))", "(()())", "(())()", "()(())", "()()()"
分析:典型的递归问题,希望加深理解。
class Solution{
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n>0)
generate(n,"",0,0,res);
return res;
}
void generate(int n, string s, int l, int r, vector<string> &res){
if(l==n){
res.push_back(s.append(n-r,')'));
return ;
}//递归跳出条件:左括号已经满n了,必须添加右括号。
generate(n,s+'(',l+1,r,res);//否则可以添加左括号
if(l>r)
generate(n,s+')',l,r+1,res);//如果右括号没左括号多的话,可以添加右括号。
}
};