思路:回溯,当左括号少于n时,可以继续加左括号;当右括号少于左括号时,可以继续加右括号。通过left和right分别表示当前左右括号的数量。

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        #回溯法
        res = []
        def backtrack(s,left,right):
            if len(s) == 2*n:
                res.append(s)
                return 
            if left < n:
                backtrack(s+'(',left+1,right)
            if right < left:
                backtrack(s+')',left,right+1)
        backtrack('',0,0)
        return res