class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        def backtrack(opening, closing, curr, result):
            if opening == closing == n:
                result.append(curr)
                return
            
            if opening < n:
                backtrack(opening + 1, closing, curr + "(", result)
            
            if closing < opening:
                backtrack(opening, closing + 1, curr + ")", result)
            
            return result   
        
        return backtrack(0, 0, "", [])

Complexity

Time: TODO
Space: TODO