add '(' or ')' with validity pruning
((()))
((())
((()
(((
(()())
(()()
(()(
(())()
(())(
(()))
(())
(()
((
()(())
()(()
()((
()()()
()()(
()())
()()
()(
())
()
(
)
ε
valid strings
(none yet)
Backtracking · open/close counters with pruning
▸1gen(s, opens, closes):2 if s.length == 2n: record s; return // complete3 // choose ( while opens < n4 if opens < n:5 gen(s + "(", opens + 1, closes)6 // choose ) while closes < opens, else prune7 if closes < opens:8 gen(s + ")", opens, closes + 1)9 return // un-choose by returning10// answer = all recorded strings
state
- n3
- goal5 valid strings