40 Combination Sum II
candidates中可能有重复的,且每个元素只能访问一次。ans中不能存在重复的。
class Solution(object):
def combinationSum2(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
ans = []
def dfs(vis, index, cur, cur_set):
if cur == target:
ans.append(cur_set)
return
if cur > target:
return
length = len(candidates)
for i in range(index, length):
if i and candidates[i-1] == candidates[i] and vis[i-1] is False:
continue
if vis[i] is False:
vis[i] = True
new_cur_set = cur_set[::]
new_cur_set.append(candidates[i])
dfs(vis, i, cur + candidates[i], new_cur_set)
vis[i] = False
candidates.sort()
dfs([False for i in range(len(candidates))],0, 0, [])
return ans