Parens
EXAMPLE
Input: 3
Output: ((())), (()()), (())(), ()(()), ()()()unordered_set<string> produceParen_rec(unordered_set<string> current, int n, int count) {
unordered_set<string> new_uset;
if (count >= n) return current;
for (string s : current) {
for (int i = 0; i < s.length(); i++) {
if (i == 0 || s[i - 1] == '(') {
string temp = s;
temp.insert(i, "()");
new_uset.insert(temp);
}
}
}
return produceParen_rec(new_uset, n, ++count);
}
unordered_set<string> produceParen(const unsigned n) {
unordered_set<string> parens = { "" };
if (n == 0) return parens;
parens.insert("()");
return produceParen_rec(parens, n, 1);
}
void print_set(const unordered_set<string> u_set)
{
int count = 0;
for (auto i : u_set)
cout << count++ << ": " << i << endl;
pause();
}
int main()
{
unordered_set<string> parens = produceParen(0);
print_set(parens);
parens = produceParen(1);
print_set(parens);
parens = produceParen(2);
print_set(parens);
parens = produceParen(3);
print_set(parens);
parens = produceParen(4);
print_set(parens);
parens = produceParen(5);
print_set(parens);
}Last updated