题目:39. Combination Sum
问题描述:https://leetcode.com/problems/combination-sum/description/
大致意思是说,从给定的数组中找到相加等于target的组合,其中数组中的每个数字可以使用多次。例如给定数组[2,3,6,7],返回[[2,2,3],[7]]。
乍一看想写DP但又写不出来,于是写了递归。递归也好久没写过了,上次写搜索代码应该还是在考研复试阶段。
Python:
class Solution(object):
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
def dfs(nums,target,startpos,path,res):
if target<0:
return
if target==0:
return res.append(path)
for i in range(startpos,len(nums)):
if target-nums[i]<0:
return
dfs(nums,target-nums[i],i,path+[nums[i]],res)
res=[]
dfs(sorted(candidates),target,0,[],res)
return res