给定一个无重复元素的数组 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 19 13:57:17 2019
@author: Administrator
"""
class Solution:
def searchInsert(self, candidates, target):
candidates.sort()
res=[]
PreList=[]
PreSum=0
end=len(candidates)-1
self.traceback(candidates,end,PreList,PreSum,target,res)
return res
def traceback(self,candidates,end,PreList,PreSum,target,res):
if (PreSum==target):
res.append(PreList[:])
return
if (PreSum>target):
return
for num in range(end,-1,-1):
PreList.append(candidates[num])
self.traceback(candidates,num,PreList,PreSum+candidates[num],target,res)
PreList.pop()
if __name__=="__main__":
print(Solution().searchInsert([2,3,5], 8))