[0040] 组合总和 II
- GitHub
- http://leetcode.xuezhisd.top/post/85366c94.html
- https://leetcode.com/problems/combination-sum-ii
- https://leetcode-cn.com/problems/combination-sum-ii
题目描述
给定一个数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的每个数字在每个组合中只能使用一次。
说明:
- 所有数字(包括目标数)都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入: candidates =[10,1,2,7,6,1,5]
, target =8
, 所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]
示例 2:
输入: candidates = [2,5,2,1,2], target = 5, 所求解集为: [ [1,2,2], [5] ]
Related Topics
题目解析
- 集合选取法
- 暴力搜索+剪枝
不确定性
- 给定target的范围
- 数据长度以及元素范围
方法一:集合选取法
分析
- 对于一个数字来讲就是选取或者不选取,穷举出所有可能依次判断即可
- 这里要解决的一个问题是相同的数字有可能被多选,举例[1, 1], 子集中会有2个[1] 这种情况是要去重。
- 注意剪枝
思路
1 | 基本思路 |
注意
- 剪枝提升效率
- 一般搜索的关键就是剪枝
- 结果去重
知识点
- 集合选取
- 剪枝
复杂度
- 空间复杂度O(n)
- 时间复杂度O(2^n)
- n为数组长度
代码
1 | class Solution { |