题目描述:
Given an integer array nums with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.
注意事项
The different sequences are counted as different combinations.
样例
Given nums = [1, 2, 4], target = 4
The possible combination ways are:
[1, 1, 1, 1]
[1, 1, 2]
[1, 2, 1]
[2, 1, 1]
[2, 2]
[4]
return 6
题目分析:
典型的动态规划问题,状态转移方程:
dp[x+y]+=dp[x]
我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果
i>=x, dp[i] += dp[i - x]
Python代码
class Solution:
# @param {int[]} nums an integer array and all positive numbers, no duplicates
# @param {int} target an integer
# @return {int} an integer
def backPackVI(self, nums, target):
# Write your code here
dp=[0]*(target +1)
dp[0]=1
for x in range(target +1):
for y in nums:
if x+y<=target:
dp[x+y]+=dp[x]
return dp[target]