回溯算法的一个总结

回溯算法的模板:

result = []

def backtrack(路径, 选择列表):

    if 满足结束条件:{

        result.add(路径)

        return

    }

 

    //每个for代表的其实就是一位,由这个for引出的下一个backtrack就是这位的下一位

    for 选择 in 选择列表:{

        做选择

        backtrack(路径, 选择列表)

        撤销选择

    }

 

问题一:子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

回溯算法的一个总结_第1张图片

 

 

问题二:子集 II

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

回溯算法的一个总结_第2张图片

 

问题三:组合

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

回溯算法的一个总结_第3张图片

 

 

问题四:全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

回溯算法的一个总结_第4张图片

 

问题五:格雷编码

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。

格雷编码序列必须以 0 开头。

回溯算法的一个总结_第5张图片

你可能感兴趣的:(回溯算法的一个总结)