python
from copy import deepcopy
from collections import Counter
class Solution:
def combinationSum(self, candidates: List[int], target: int):
n = len(candidates)
track = []
visited = []
res = []
def backtrack(candidates, track):
if sum(track) == target:
dic = Counter(track)
if dic not in visited:
tmp = deepcopy(track)
res.append(tmp)
visited.append(dic)
return
elif sum(track) > target:
return
for i in candidates:
track.append(i)
backtrack(candidates, track)
track.pop()
backtrack(candidates, track)
return res