problem
377. Combination Sum IV
Given an array of distinct integers nums and a target integer target, return the number of possible combinations that add up to target.
The test cases are generated so that the answer can fit in a 32-bit integer.
Example 1:
Input: nums = [1,2,3], target = 4
Output: 7
Explanation:
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.
Example 2:
Input: nums = [9], target = 3
Output: 0
approach 1 recursive TLE
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
if(target == 0) return 1;
if(target < 0) return 0;
int res = 0;
for(auto x : nums)
res += combinationSum4(nums, target - x);
return res;
}
};
approach 2 dp
class Solution {
public:
vector<int> dp;
int rec(vector<int>& nums, int target){
if(target == 0) return 1;
if(dp[target] != -1) return dp[target];
int res = 0;
for(auto x : nums){
if(target - x >= 0)
res += dp[target - x] = rec(nums, target - x);
}
return res;
}
int combinationSum4(vector<int>& nums, int target) {
dp = vector<int>(target+1, -1);
return rec(nums, target);
}
};
版权声明:本文为NP_hard原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。