Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
class Solution {
public:
vector<string> generateParenthesis(int n) {
if (n == 0) return vector<string>{""};
vector<string> paren;
for (int i = 0; i < n; ++i) {
for (const auto &p: generateParenthesis(i)) {
string left = "(" + p + ")";
for (const auto &right: generateParenthesis(n - 1- i)) {
paren.push_back(left + right);
}
}
}
return paren;
}
};
class Solution {
public:
vector<string> generateParenthesis(int n) {
static vector<vector<string>> paren{{""}};
if (paren.size() - 1 >= n) return paren[n];
while (paren.size() - 1 < n) {
vector<string> par;
int num_pairs = paren.size();
for (int i = 0; i < num_pairs; ++i) {
for (const auto &p: paren[i]) {
string left = "(" + p + ")";
for (const auto &right: paren[num_pairs - 1- i]) {
par.push_back(left + right);
}
}
}
paren.push_back(par);
}
return paren.back();
}
};