LeetCode----回溯

1 算法模板

for 选择 in 选择列表:
    # 做选择
    将该选择从选择列表移除
    路径.add(选择)
    backtrack(路径, 选择列表)
    # 撤销选择
    路径.remove(选择)
    将该选择再加入选择列表

2 代码示例

46. 全排列

class Solution:
    def __init__(self):
        self.res = []

    def backtrack(self, used, nums, num):
        # base case 
        if len(num) == len(nums):
            self.res.append(num[:])
            return
        # 状态选择
        for i in range(len(nums)):
            # 已访问标记
            if used[i]:
                continue
            # 做选择
            num.append(nums[i])
            used[i] = True
            # 进入下一轮决策树
            self.backtrack(used, nums, num)
            # 撤销选择
            used[i] = False
            num.pop()


    def permute(self, nums: List[int]) -> List[List[int]]:
        # 标记访问路径
        used = [False] * len(nums)
        # 存储路径
        num = []
        self.backtrack(used, nums, num)
        return self.res
posted @ 2023-06-08 20:33  柳叶昶  阅读(3)  评论(0编辑  收藏  举报