This commit is contained in:
krahets
2023-06-22 00:22:53 +08:00
parent 17e19ea4fe
commit 5bc8df6d5d
4 changed files with 33 additions and 8 deletions

View File

@@ -10,11 +10,11 @@ comments: true
例如,输入集合 $\{3, 4, 5\}$ 和目标整数 $9$ ,由于集合中的数字可以被重复选取,因此解为 $\{3, 3, 3\}, \{4, 5\}$ 。请注意,子集是不区分元素顺序的,例如 $\{4, 5\}$ 和 $\{5, 4\}$ 是同一个子集。
## 12.3.1.   参考全排列解法
## 12.3.1.   全排列引出解法
从回溯算法的角度看,我们可以把子集的生成过程想象成一系列选择的结果,并在选择过程中实时更新“元素和”,当元素和等于 `target` 时,就将子集记录至结果列表。
类似于上节全排列问题的解法,我们可以把子集的生成过程想象成一系列选择的结果,并在选择过程中实时更新“元素和”,当元素和等于 `target` 时,就将子集记录至结果列表。
上节全排列问题不同的是,本题允许重复选取同一元素,因此无需借助 `selected` 布尔列表来记录元素是否已被选择。我们可以对全排列代码进行小幅修改,初步得到解题代码。
与全排列问题不同的是,本题允许重复选取同一元素,因此无需借助 `selected` 布尔列表来记录元素是否已被选择。我们可以对全排列代码进行小幅修改,初步得到解题代码。
=== "Java"
@@ -396,7 +396,7 @@ comments: true
<p align="center"> Fig. 子集和 I 回溯过程 </p>
## 12.3.3. &nbsp; 考虑相等元素
## 12.3.3. &nbsp; 相等元素剪枝
!!! question