Skip to content

Latest commit

 

History

History
116 lines (82 loc) · 2.38 KB

0040-combination-sum-ii.adoc

File metadata and controls

116 lines (82 loc) · 2.38 KB

40. 组合总和 II

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次

注意:解集不能包含重复的组合。

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
  [1,1,6],
  [1,2,5],
  [1,7],
  [2,6]
]

示例 2:

输入: candidates = [2,5,2,1,2], target = 5,
输出:
[
  [1,2,2],
  [5]
]

提示:

  • 1 <= candidates.length <= 100

  • 1 <= candidates[i] <= 50

  • 1 <= target <= 30

思路分析

{image_attr}
{image_attr}
{image_attr}
{image_attr}
{image_attr}
{image_attr}

这道题的关键是由于候选值不能重复使用,所以需要向下传递起始位置。可以对比一下 39. Combination Sum 的处理上的不同之处。

思考一下解决重复值时是怎么剪枝的?

一刷
link:{sourcedir}/_0040_CombinationSumII.java[role=include]
二刷
link:{sourcedir}/_0040_CombinationSumII_2.java[role=include]
三刷
link:{sourcedir}/_0040_CombinationSumII_3.java[role=include]
四刷
link:{sourcedir}/_0040_CombinationSumIi_4.java[role=include]

思考题

如果一个既存在重复元素,同一个元素又可以重复使用,该怎么做组合总和?

其实,不能这样搞。没办法区分是同一个元素,还是重复的元素。