当前位置 博文首页 > Combination Sum_大锅八十小锅四十:Leetcode

    Combination Sum_大锅八十小锅四十:Leetcode

    作者:[db:作者] 时间:2021-07-27 08:48

    Tag
    Array\Backtracking
    Difficulty
    Medium
    Description
    Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

    The same repeated number may be chosen from C unlimited number of times.

    Note:
    All numbers (including target) will be positive integers.
    The solution set must not contain duplicate combinations.
    For example, given candidate set [2, 3, 6, 7] and target 7,
    A solution set is:
    [
    [7],
    [2, 2, 3]
    ]
    Code
    回溯

    class Solution(object):
        def __init__(self):
            self.ret =[]
    
        def dfs(self,candidates,targets,tmplist):
            if sum(tmplist)==targets:
                self.ret.append(tmplist[:])
            elif sum(tmplist)>targets:
                pass
            else:
                for i in range(len(candidates)):
                    tmplist.append(candidates[i])
                    self.dfs(candidates[i:],targets,tmplist)
                    tmplist.remove(tmplist[-1])
                #self.dfs(candidates,targets,tmplist)
    
        def combinationSum(self,candidates,targets):
            '''
            :param candidates: List[int]
            :param targets: int
            :return: List[List[int]]
            '''
            candidates.sort()
            self.dfs(candidates,targets,[])
            return self.ret
    cs