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);
}
};
这是一篇关于LeetCode第377题《组合总和IV》的博客,介绍了如何利用动态规划解决求解目标数的组合数问题。文章提供了两种不同的解题思路。

252

被折叠的 条评论
为什么被折叠?



