题目
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
示例
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
C++代码
看的网上的答案,递归。
左右括号数目相等,均为n。
在生成括号组合的过程中,生成的左括号数目应当大于等于右括号的数目,即在剩下的需要生成的括号中,左括号数目小于等于右括号数目。
当需要生成的左右括号数目均为0时,说明生成完毕。
先左后右。
public:
vector<string> generateParenthesis(int n)
{
vector<string> res;
generate(n,n,"",res);
return res;
}
void generate(int left,int right,string out,vector<string> &res)
{
if(left>right) return;
if(left==0 && right==0)
res.push_back(out);
else
{
if(left>0) generate(left-1,right,out+"(",res);
if(right>0) generate(left,right-1,out+")",res);
}
}
};