题目

解题
- 不确定的长度 应该递归 非最优解 无需动态规划
 - 求所有组合路径问题 可以全排列, 但是排列有要求 这类基本可以回溯
 
回溯-递归的基本思路
- 路径为字符串
 - 退出条件为到达长度
 - 推进路径 应该 左右两个方向
 
标准解法 这个比较取巧 左右加 做后判断 长度到了就 ok
def solution(n: int):
    rsts = []
    def backtrace(path, left: int, right):
        if len(path) == n * 2:
            """
            退出递归条件
            """
            rsts.append(path)
            return
        if left < n:
            """
            分之 1 加左括号
            """
            backtrace(path + "(", left + 1, right)
        if right < left:
            """
            右括号次数 < 左括号  可以加
            """
            backtrace(path + ")", left, right + 1)
    # for i in range(n):
    backtrace("", 0, 0)
    return rsts
def generate_parenthesis(n):
    def backtrack(s='', left=0, right=0):
        if len(s) == 2 * n:
            result.append(s)
            return
        if left < n:
            backtrack(s + '(', left + 1, right)
        if right < left:
            backtrack(s + ')', left, right + 1)
    result = []
    backtrack()
    return result
# 示例
print(generate_parenthesis(3))