题目描述:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
Accepted C++ Solution:
简洁的递归解决方案:
使用两个整数来计算要添加的剩余左括号(n) 和右括号(m)。 在每个函数调用中,如果n>0,则添加左括号;如果m>0,则添加右括号。当m和n都为零时,追加结果并终止递归调用。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
addingpar(res,"",n,0);
return res;
}
void addingpar(vector<string> &v, string str, int n, int m) {
if (n==0 && m==0) {
v.push_back(str);
return;
}
if (m>0) { addingpar(v,str+")",n,m-1); }
if (n>0) { addingpar(v,str+"(",n-1,m+1);}
}
};