1.7 KiB
1.7 KiB
layout, title, last_solved, category, leetcode_url, status
| layout | title | last_solved | category | leetcode_url | status |
|---|---|---|---|---|---|
| page | Combination Sum II | backtrack | https://leetcode.com/problems/combination-sum-ii | Attempted |
Problem
Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.
Each number in candidates may only be used once in the combination.
Note:
All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [10,1,2,7,6,1,5], target = 8,
A solution set is:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]
Example 2:
Input: candidates = [2,5,2,1,2], target = 5,
A solution set is:
[
[1,2,2],
[5]
]
Solution
{% highlight python %}
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
output = []
candidates = sorted(candidates)
def backtrack(currentList, remaining, start):
if remaining<0:
return
elif remaining==0:
output.append(currentList.copy())
else:
for i in range(start, len(candidates)):
if i==start or candidates[i]!=candidates[i-1]:
currentList.append(candidates[i])
backtrack(currentList, remaining-candidates[i], i+1)
currentList.pop()
backtrack([], target, 0)
return output
{% endhighlight %}
{% highlight python %}
{% endhighlight %}