⚠️ 排列、组合、子集三样一起数
一次算出三个数:[1,2,3] 的全排列个数、[1,2,3,4] 里取 2 个的组合个数、[1,2,3] 的子集个数。 三个数用 / 拼起来输出。
开始练习 →
回溯框架的三步是什么
回溯的标准框架是【0】。
开始练习 →
「撤销」这一步在做什么
回溯里的「撤销」是【0】。
开始练习 →
⚠️ 忘了撤销会怎样
忘了写撤销那一步,结果会【0】。
开始练习 →
什么时候记下一个解
回溯里记录一个解的时机是【0】。
开始练习 →
标准模板跑出来是什么
用标准回溯模板生成 [1, 2, 3] 的全排列。运行下面这段程序: def perm(a): res = [] path = [] used = [False] * len(a) def dfs():
开始练习 →
把三步写全
补全 dfs 的循环体:选择(标记 + 入路径)、探索(递归)、撤销(取消标记 + 出路径)。输出解的个数。
开始练习 →
⚠️ 修一个漏了撤销的版本
下面这个版本只撤销了 used,忘了把 path 弹出来,跑出来只剩 1 个解。 把它修好,输出修好之后解的个数。
开始练习 →
⚠️ 撤销与不撤销,一起跑
把撤销写全的版本和漏了 path.pop() 的版本都写出来,各跑一遍 [1, 2, 3]。 把两个解的个数拼起来输出(写全的在前)。
开始练习 →
剪枝是什么
回溯里的剪枝是指【0】。
开始练习 →