Medium
Given n
pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example 1:
Input: n = 3
Output: [”((()))”,”(()())”,”(())()”,”()(())”,”()()()”]
Example 2:
Input: n = 1
Output: [”()”]
Constraints:
1 <= n <= 8
(define (generate-parenthesis n)
(let ([res '()])
(let loop ([opening 0] [closing 0] [path ""])
(cond ((and (= opening n) (= closing n))
(set! res (cons path res)))
(else
(when (< opening n)
(loop (add1 opening) closing (string-append path "(")))
(when (< closing opening)
(loop opening (add1 closing) (string-append path ")")))))
res)))