解题代码:
classSolution {
public:
void com(string str,int a,intb,vector<string>& res){
if(a==0&&b==0){
res.push_back(str);
return;
}
if(b>0)
com(str+")",a,b-1,res);
if(a>0)
com(str+"(",a-1,b+1,res);
}
vector<string>generateParenthesis(int n) {
vector<string> res;
if(n<=0)
return res;
int a=n,b=0;
string str;
com(str,a,b,res);
return res;
}
};
解题思路:
题目要求给出所有配对正确的n对括号组成的字符串。因此共有n个“(”和n个“)”。我采用的是递归的方法,一开始共有a(n)个左括号和b(0)个又括号需要输入,当a和b大于0的时候,说明下一个字符是左括号或者右括号都是正确的,分别对两个情况进行下一步操作。直至最后a和b的值均为0则说明达到字符串合适长度。输出该结果。