Python 算法教程(41):回溯算法框架详解

前言

回溯算法是解决组合、排列、子集问题的通用框架。

一、回溯框架

def backtrack(路径,选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径,选择列表)
        撤销选择

二、全排列问题

def permute(nums):
    result = []
    def backtrack(path, remaining):
        if not remaining:
            result.append(path[:])
            return
        for i in range(len(remaining)):
            path.append(remaining[i])
            backtrack(path, remaining[:i] + remaining[i+1:])
            path.pop()
    backtrack([], nums)
    return result

三、复杂度

时间:O(n!),空间:O(n)

四、LeetCode 实战

46. 全排列、78. 子集

总结

掌握回溯框架,解决排列组合问题。

下一篇:组合总和问题

发表回复

后才能评论