Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example:
Input: 3
Output:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
Solution
from typing import List
class Solution:
def generateParenthesisHelper(self, parenthesis: [str], curStr: str, openParens: int, closeParens: int) -> None:
if openParens == 0 and closeParens == 0:
parenthesis.append(curStr)
return
if openParens > 0:
self.generateParenthesisHelper(parenthesis, curStr + '(', openParens-1, closeParens)
if closeParens > openParens:
self.generateParenthesisHelper(parenthesis, curStr + ')', openParens, closeParens-1)
def generateParenthesis(self, n: int) -> List[str]:
parenthesis = []
self.generateParenthesisHelper(parenthesis, "", n, n)
return parenthesis
Test Cases
test = Solution()
answer = test.generateParenthesis(3)
assert answer == [
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
], answer
print('All Passed!')
Big O Analysis
Space Complexity: O(1)
Time Complexity: O(2N)