一、题目描述
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?
思路:动态规划,首先要想清楚下面的这个公式:
f(target) = f(target - nums[0]) + f(target - nums[1]) + ... + f(target - nums[n])
n=nums.size()
c++代码(4ms)
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<int> dp(target+1, 0); //dp[i]表示target=i时有多少种组合
dp[0]=1;
for(int i=1; i<=target; i++){
for(int num:nums){
if(i>=num){
dp[i] += dp[i-num];
}//if
}//for
}//for
return dp[target];
}
};