给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
——————
解法:图片来源于leetcode中的liweiwei大牛,有兴趣的可以了解一下这位大牛的解法。
使用回溯算法,C++代码如下:
class Solution {
private:
vector<string> str;
public:
vector<string> generateParenthesis(int n) {
if(n<=0) # 特殊情况,直接返回空集
return str;
string s; # 用于存储不断遍历时的中间值
function(n,n,s); # 递归函数
return str;
}
void function(int l,int r,string s)
{
if(l==0 && r==0) # 当左右括号的个数为零的时候,返回该字符串
{
str.push_back(s);
return;
}
if(l>0) # 每遍历到一个点,有两种情况。第一种情况是加左括号
{
function(l-1,r,s + '(');
}
if(r>l && r>0) # 第二种情况是加右括号
{
function(l,r-1,s + ')');
}
}
};