加起来和为目标值的组合:
给定一个由不同整数构成的数组 nums 和一个整数 target ,请你从 nums 找出总和是 target 的组合的个数。解集中可以重复使用 nums 中的元素。且解集中数字顺序不同视为不同的组合。
解法一、DFS
out=0
class Solution:
def combination(self , nums , target ):
nums.sort()
numlen=len(nums)
def dfs(t):
global out
if sum(t) > target:
return
if sum(t) == target:
out=out+1
return
for num in nums:
dfs(t + [num])
dfs([])
return out
解法二、动态规划
def combination(self , nums , target ):
dp = [0 for _ in range(target+1)]
dp[0] = 1
for j in range(target+1):
for i in range(len(nums)):
if j-nums[i]>=0:
dp[j]=dp[j]+dp[j-nums[i]]
return dp[-1]