原题链接:Leetcode 377. 组合总和 Ⅳ
可参考官解
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<int> dp(target + 1);
dp[0] = 1;
// 总和为 i 的元素组合的个数
for (int i = 1; i <= target; i++) {
// 每次都遍历nums数组,考虑了选择每一个元素,dp[i]的可能,即dp[i-x]
// 下一次遍历不同的i值,又会重新遍历nums数组,又会考虑选择每一个元素的可能
// 因此可以出现,先选1,再选2,或者先选2再选1的情况
for (auto x : nums) {
if (x <= i && dp[i - x] < INT_MAX - dp[i]) {
dp[i] += dp[i - x];
}
}
}
return dp[target];
}
};