递归解法一
普通的递归解法,从列表中筛选数字,如果筛选的数字小于目标值,进行递归,直到等于目标值输出结果
class Solution:
def combinationSum(self, candidates, target):
candidates.sort()
ans = [] ##定义一个数字来存放结果
def helper(sums,path):##sums:前面选择的数字的和
for n in candidates: #对备选数组中的每个数字进行循环
if not path or n >= path[-1]: #只选择大于等于被选数字中最大的那个数字
if sums+n == target: #如果等于结果,将结果添加至ans
ans.append(path+[n])
return
elif sums+n<target: #如果结果小于,那进行递归,
helper(sums+n,path+[n])
else:
return
helper(0,[])
return ans
递归解法二
DFS(深度优先搜索)
class Solution:
def combinationSum(self, candidates, target):
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 range(index, len(nums)):
self.dfs(nums, target-nums[i], i, path+[nums[i]], res)