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 in python:
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
result = []
candidates.sort()
def backtrack(arr, sol):
if sum(sol) > target:
return
if sum(sol) == target:
result.append(sol)
return
# note that arr changes each time
for i in range(len(arr)):
# filter the duplicates
if i > 0 and arr[i] == arr[i-1]:
continue
backtrack(arr[i+1:], sol+[arr[i]])
backtrack(candidates, [])
return result
Complexity analysis:
- Time complexity:
O(2^n)
留言