Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.
Example:
nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) Note that different sequences are counted as different combinations. Therefore the output is 7.
Follow up:
What if negative numbers are allowed in the given array?
How does it change the problem?
What limitation we need to add to the question to allow negative numbers?
dp【0】=1(啥也不加,一种方案)主要为了方便
dp【1】=dp【1-1】=1
dp【2】=dp【2-1】+dp【2-2】=2
dp【3】=dp【3-1】+dp【3-2】+dp【3-3】=4
dp【4】=dp【4-1】+dp【4-2】+dp【4-3】=7
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
int dp[target+1];
for(int i=0;i<=target;i++)
{
dp[i]=0;
}
dp[0]=1;
for(int i=0;i<=target;i++)
{
for(int j=0;j<nums.size();j++)
{
if(i-nums[j]>=0)
{
if(dp[i-nums[j]])
{
dp[i]+=dp[i-nums[j]];
}
}
}
}
return dp[target];
}
};