-
题目链接 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] ]
-
-
解题思路
- 采用剪枝的DFS, 因为返回数据重复的答案,这里采用给每个元素计数的方式。如[2,5,2,1,2] -> (1, 1), (2, 3), (5, 1)]
-
代码
- python
class Solution: def combinationSum2(self, candidates, target): if not candidates: return [] from collections import Counter c = Counter(candidates).most_common() c.sort(key=lambda a: a[0]) N = len(c) print(c) res = [] def _dfs(index, target, cur): if target == 0: nonlocal res return res.append(cur) if target < 0 or index >= N: return v, n = c[index] for i in range(n + 1): _dfs(index + 1, target - v*i, cur + [v] * i) _dfs(0, target, []) return res
- python
leetcode 40. 组合总和 II
最新推荐文章于 2024-05-21 23:29:47 发布