Backpack VI
Description:
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.
Example:
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]
分析:
这道题和背包问题感觉没有多大的关系,可以用回溯的方法,不过当数据量很多的时候肯定会超时,所以还是用动态规划。
假设dp[i]
表示容量为i
的时候,总共的可行组合方案数。
由于要计算所有的组合可能数目,所以对于每一个nums[j]
,如果i >= nums[j]
,则表示nums[j]
可能是某个组合方案里的一个数,此时就需要考虑dp[i-num[j]]
有多少种组合方案数目,把这些组合方案数目加到当前的dp[i]
中去。
注意:初始化dp[0] = 1
,因为当容量为0
时,只有一种组合方案:不取任何数。
Code:
1 | class Solution { |