LeetCode刷题(5)

来源:互联网 发布:什么是淘宝的企业店铺 编辑:程序博客网 时间:2024/06/08 07:23

Combination Sum
使用集合中的数据求特定和,组合数据无重复,但数据可重复使用
dfs算法,现对数据进行排序,每次取自身及其后的数,防止重复

        res = []        candidates.sort()        self.dfs(candidates, target, 0, [], res)        return res    def dfs(self, nums, target, index, path, res):        if target < 0:            return        if target == 0:            res.append(path)            return        for i in xrange(index, len(nums)):            self.dfs(nums, target-nums[i], i, path+[nums[i]], res)

Combination Sum II
数据不能重复使用

        res = []        candidates.sort()        self.dfs(candidates, target, 0, [], res)        return res    def dfs(self, nums, target, index, path, res):        if target < 0 :            return         if target == 0:            res.append(path)            return        for i in xrange(index, len(nums)):            if i!=index and nums[i] == nums[i-1]:                continue            self.dfs(nums, target - nums[i], i + 1, path + [nums[i]], res)

比如有1,1,1,结果中只能包含两个1,那么该方案只取前两个,以避免重复。