题目源自于leetcode。
题目: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:
"((()))", "(()())", "(())()", "()(())", "()()()"
解法:依然采用的递归思想来遍历所有可能的状态子空间。
代码:
class Solution {
public:
vector<string> generateParenthesis(int n) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<string> s;
fun(s, "", 0, n);
return s;
}
void fun(vector<string> &s, string result, int stack, int left)
{
if(stack ==0 && left == 0)
{
s.push_back(result);
return;
}
if(left > 0)
{
if(stack==0)
{
fun(s, result+'(', stack+1, left-1);
}
else
{
fun(s, result+'(', stack+1, left-1);
fun(s, result+')', stack-1, left);
}
}
else
{
if(stack>0)
{
fun(s, result+')', stack-1, left);
}
}
}
};