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

results matching ""

    No results matching ""