Generate All Well-Formed Parentheses
Problem
Return every well-formed parenthesis string using exactly n pairs.
Track open (number of '(' still allowed) and close (number of ')' still allowed). Append '(' if open > 0; append ')' if close > open, i.e. there's an unmatched '('. When both counters hit zero, the string is balanced — emit it. The number of valid strings is the n-th Catalan number.
Input
n = 3Output
((())) (()()) (())() ()(()) ()()()Five strings — Catalan(3) = 5.
def generate(n):
out = []
def back(s, open_, close_):
if not open_ and not close_:
out.append(s); return
if open_:
back(s + "(", open_ - 1, close_)
if close_ > open_:
back(s + ")", open_, close_ - 1)
back("", n, n)
return out
function generate(n) {
const out = [];
function back(s, open, close) {
if (!open && !close) { out.push(s); return; }
if (open) back(s + "(", open - 1, close);
if (close > open) back(s + ")", open, close - 1);
}
back("", n, n);
return out;
}
List<String> out = new ArrayList<>();
public List<String> generate(int n) {
back(new StringBuilder(), n, n);
return out;
}
void back(StringBuilder sb, int open, int close) {
if (open == 0 && close == 0) { out.add(sb.toString()); return; }
if (open > 0) {
sb.append('('); back(sb, open - 1, close); sb.deleteCharAt(sb.length() - 1);
}
if (close > open) {
sb.append(')'); back(sb, open, close - 1); sb.deleteCharAt(sb.length() - 1);
}
}
vector<string> out;
void back(string& s, int open, int close) {
if (open == 0 && close == 0) { out.push_back(s); return; }
if (open) { s.push_back('('); back(s, open - 1, close); s.pop_back(); }
if (close > open) { s.push_back(')'); back(s, open, close - 1); s.pop_back(); }
}
vector<string> generate(int n) {
string s; back(s, n, n);
return out;
}