回溯算法的一个总结

回溯算法的模板:

result = []

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

????if 满足结束条件:{

????????result.add(路径)

????????return

? ? }

?

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

????for 选择 in 选择列表:{

????????做选择

????????backtrack(路径, 选择列表)

????????撤销选择

? ? }

?

问题一:子集

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

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

回溯算法的一个总结

?

?

问题二:子集 II

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

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

回溯算法的一个总结

?

问题三:组合

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

回溯算法的一个总结

?

?

问题四:全排列

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

回溯算法的一个总结

?

问题五:格雷编码

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

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

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

回溯算法的一个总结