python--lintcode135. 数字组合

描述

给出一个候选数字的set(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。

例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:

[7],

[2,2,3]

  • 所有的数字(包括目标数字)均为正整数。
  • 元素组合(a1a2, … , ak)必须是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。
  • 解集不能包含重复的组合。

样例

给出候选set[2,3,6,7]和目标数字7

返回 [[7],[2,2,3]]


题目意思很明确了,这就是一个排列组合的问题,请注意,所有排列组合的问题,都用dfs来做!

这一题跟我写的上一题有类似的地方,详情请看:https://blog.csdn.net/wenqiwenqi123/article/details/80024729

但是因为这一题允许元素重复,所以下标在递归的时候不需要加一,具体代码如下:

class Solution:
    """
    @param candidates: A list of integers
    @param target: An integer
    @return: A list of lists of integers
    """
    def combinationSum(self, candidates, target):
        # write your code here
        def search(candidates,target,index,list):
            if(sum(list)==target):
                self.result.append(list)
                return
            if(index==len(candidates)):
                return
            if(sum(list)>target):
                return
            for i in range(index,len(candidates)):
                search(candidates,target,i,list+[candidates[i]])

        if(len(candidates)==0):
            return []

        self.result=[]
        list=[]
        search(sorted(candidates),target,0,list)

        return self.result





s=Solution()
print(s.combinationSum([2,3,7],7))


猜你喜欢

转载自blog.csdn.net/wenqiwenqi123/article/details/80195896