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)
最后修改日期: 2020年9月10日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。