模板
def backtrack(self, nums: List[int]) -> List[List[int]]:"""有放回全排列,演示回溯&深度优化搜索模板"""res, size = [], len(nums)def dfs(depth, path):if depth == size: # 递归终结条件res.append(path[:])returnfor i in range(size):path.append(nums[i])dfs(depth + 1, path)path.pop() # 回退dfs(0, [])return resif __name__ == '__main__':print(backtrack([1, 2, 3]))# [[1, 1, 1], [1, 1, 2], [1, 1, 3],..., [3, 3, 2], [3, 3, 3]]
其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」
