377. 组合总和 Ⅳ
LeetCode每日一题 2021/4/24
//解法1
class Solution{
public:
int dp[1005];
int dfs(const vector<int> &nums, int target){
if(dp[target] != -1) return dp[target];
int ans = 0;
for(int i : nums){
if(i > target) break;
if(i == target){
ans++;
break;
}
ans += dfs(nums, target - i);
}
dp[target] = ans;
return ans;
}
int combinationSum4(vector<int> &nums, int target){
sort(nums.begin(), nums.end());
memset(dp, -1, sizeof dp);
return dfs(nums, target);
}
};
//解法2
class Solution{
public:
int combinationSum4(vector<int> &nums, int target){
unsigned int dp[target + 1];
memset(dp, 0, sizeof dp);
dp[0] = 1;
int len = nums.size();
for(int i = 0; i <= target; i++){
for(int j = 0; j < len; j++){
if(nums[j] <= i) dp[i] += dp[i - nums[j]];
}
}
return dp[target];
}
};