class Solution {
public:
vector<string> ret;
vector<int> sln;
void DFS(int p, int q) {
if (p > q) return;
if (q == 0) {
string s = "";
for (int i = 0; i < sln.size(); i++)
s += sln[i] ? '(' : ')';
ret.push_back(s);
return;
}
for (int i = 1; i <= p; i++) {
for (int j = 1; j <= q; j++) {
for (int k = 0; k < i; k++)
sln.push_back(1);
for (int k = 0; k < j; k++)
sln.push_back(0);
DFS(p - i, q - j);
for (int k = 0; k < j; k++)
sln.pop_back();
for (int k = 0; k < i; k++)
sln.pop_back();
}
}
}
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ret.clear();
DFS(n, n);
return ret;
}
};
Small Case: 4ms
Large Case: 20ms