这里上传两种解法:
1. Memorized Search:
unordered_map<int, int> mp;
int combinationSum4(vector<int>& nums, int target) {
if(nums.empty() || target < 0) return 0;
if(target == 0) return 1;
else if(mp.count(target)){
return mp[target];
}
int res = 0;
for(int i=0; i<nums.size(); i++){
res += combinationSum4(nums, target - nums[i]);
}
mp[target] = res;
return res;
}
};
2.DP:
vector<int> dp(target+1, 0);
dp[0] = 1;
for(int i=1; i<=target; i++){
for(int j=0; j<n; j++){
if(i >= nums[j]) dp[i] += dp[i-nums[j]];
}
}
return dp[target];