采用回溯法
class Solution:
def __init__(self):
self.res = []
self.mina = None
self.hashdict = {}
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
candidates = sorted(candidates)
self.mina = candidates[0]
self.q(candidates,[],target)
return self.res
def q(self,candidates,lastres,left):
if left == 0:
tempstr = str(lastres)
if tempstr not in self.hashdict:
self.hashdict[tempstr] = 1
self.res.append(lastres)
elif left >= self.mina:
for value in candidates:
if value <= left:
lastres.append(value)
#tempres = sorted(lastres)
self.q(candidates,sorted(lastres),left - value)
lastres.pop(-1)