Given a collection of candidate numbers (candidates) and a target number (target),
find all unique combinations in candidates where the candidate numbers sum to target.
Each number in candidates may only be used once in the combination.
Note: The solution set must not contain duplicate combinations.
사용가능한 숫자들의 배열이 주어지고, 이들을 더해 완성할 타겟 값이 주어진다.
배열에 들어간 숫자들을 이용해 타겟 합을 가지는 부분배열을 만들때,
모든 부분배열의 조합을 중복없이 전부 리턴하시오.
Input: candidates = [10,1,2,7,6,1,5], target = 8
Output:
[
[1,1,6], - 1 + 1 + 6 = 8
[1,2,5], - 1 + 2 + 5 = 8
[1,7], - 1 + 7 = 8
[2,6] - 2 + 6 = 8
]
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
ans = set()
app = []
candidates.sort()
def finder(last_index, left_value):
if left_value == 0:
ans.add(tuple(app))
return
prev = None
for index in range(last_index + 1, len(candidates)):
if left_value - candidates[index] < 0:
return
if prev != candidates[index]:
prev = candidates[index]
app.append(candidates[index])
finder(index, left_value - candidates[index])
app.pop()
finder(-1, target)
return ans
이게 왜 빠름?