题目描述:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
class Solution {
public:
int n;
vector<string> res;
string s;
vector<string> generateParenthesis(int n)
{
if(n == 0)
return res;
this->n = n;
help(n,n);
return res;
}
void help(int left,int right)
{
if(left == 0 && right == 0)
{
res.push_back(s);
return;
}
if(left > right)
return;
if(left>0)
{
s+='(';
help(left-1,right);
s.pop_back();
}
if(right > 0)
{
s+=')';
help(left,right-1);
s.pop_back();
}
}
};
解题思路:
这里还是强行套用了dfs+回溯法的解题模型,每次选取一个左括号或者一个右括号,注意为了括号匹配的正确性所设置的两个条件 left > right和 left > 0 与 right > 0。