0022: Generate Parentheses

Problem Statement

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

Code Solution

class Solution:
    def generateParenthesis(self, n):
	    
        def generate(ob, cb, buf, output):
            if cb > ob:
                return
            if len(buf) == 2 * n:
                output.append("".join(buf))
                return
            if ob < n:
                buf.append('(')
                generate(ob + 1, cb, buf, output)
                buf.pop()
            buf.append(')')
            generate(ob, cb + 1, buf, output)
            buf.pop()
        
        result = []
        generate(0, 0, [], result)
        return result