Steward
分享是一種喜悅、更是一種幸福
程式語言 - LeetCode - C++ - 377. Combination Sum IV
題目:

解答一:
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
int n = nums.size();
vector<unsigned long long> dp(target + 1, 0);
dp[0] = 1;
for (int i = 1; i <= target; ++i) {
for (int num : nums) {
if (i >= num) {
dp[i] += dp[i - num];
}
}
}
return dp[target];
}
};
解答二:
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
unordered_map<int, int> memo;
auto dfs = [&](this auto&& dfs, int target) -> int {
if (target == 0) {
return 1;
}
if (target < 0) {
return 0;
}
if (memo.count(target)) {
return memo[target];
}
int ans = 0;
for (int num : nums) {
ans += dfs(target - num);
}
return memo[target] = ans;
};
return dfs(target);
}
};