【39】给定一个无重的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复

#encoding=utf8
#
'''
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例 1:

输入: candidates = [2,3,6,7], target = 7,
  所求解集为:
  [
      [7],
        [2,2,3]
        ]
        示例 2:

        输入: candidates = [2,3,5], target = 8,
        所求解集为:
        [
            [2,2,2,2],
            [2,3,3],
            [3,5]
          ]

          来源:力扣(LeetCode)
          链接:https://leetcode-cn.com/problems/combination-sum
          著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。'''
ans = []
path = []

ans = []
path=[]
count=0
import copy
class Solution2(object):
    def combinationSum(self, candidates, target):
        global path
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        def robot(idx, candidates, cur_sum):
            #print 'n:',n,'k:',k,'len(path):',len(path)
            global count
            count +=1
            if cur_sum == target:
                ans.append(copy.copy(path))
                return
            if cur_sum >target:return
            for i in candidates:
                path.append(i)
                robot(idx+1, candidates, cur_sum+i)
                path.pop()
        ans = []
        path = []
        cur_sum = 0
        robot(0, candidates, cur_sum)
        return ans

if __name__ == '__main__':
  a = Solution2()
  candidates = [2,3,6,7]
  target = 7
  print a.combinationSum(candidates,target)
  print '递归了',count,'次'

[[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]]
递归了 37 次
 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值