难点:注意list是可变元素,所以不能加入到set集合中,所以把list变成tuple加入到set中,dfs完了再把再把里面的元组变成list,然后把集合ans变成list
注意这种情况下使用tuple元组,通常需要对原来的数组进行排序。
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
candidates.sort()
ans=set()
n=len(candidates)
def dfs(index,num,ant):
if ant==target:
ans.add(tuple(num))#在这里变成元组,加入到集合set中,最后dfs完了
#再把元组变成list,然后把集合变成list
if(index==n):
return
for i in range(index,n):
#注意这里的剪枝
if i>index and candidates[i]==candidates[i-1]:
continue
if candidates[i]+ant>target:
break
num.append(candidates[i])
dfs(i+1,num,candidates[i]+ant)
num.pop(-1)
dfs(0,[],0)
ans=list(map(list,ans))
return ans