题目源自于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);
}
}
}
};

本文介绍了一个基于递归思想的算法,用于生成所有合法的n对括号组合。通过递归地添加左括号和右括号,并确保在任何时候右括号的数量不超过左括号的数量,该算法能够有效地找到所有可能的合法括号组合。
365

被折叠的 条评论
为什么被折叠?



