回溯算法的一个总结
回溯算法的模板:
result = []
def backtrack(路径, 选择列表):
????if 满足结束条件:{
????????result.add(路径)
????????return
? ? }
?
? ? //每个for代表的其实就是一位,由这个for引出的下一个backtrack就是这位的下一位
????for 选择 in 选择列表:{
????????做选择
????????backtrack(路径, 选择列表)
????????撤销选择
? ? }
?
问题一:子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
?
?
问题二:子集 II
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
?
问题三:组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
?
?
问题四:全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
?
问题五:格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。
给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。
格雷编码序列必须以 0 开头。