1、思路
-
本次的
DP
思路与上一题 剑指 Offer II 103. 最少的硬币数目 一致,只不过多了一个排列组合的条件; -
只要将状态转移方程修改为
dp[i] += dp[i - num]
即可,累加不同排列组合的状态。
2、代码
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<unsigned int> dp(target + 1);
dp[0] = 1; //空排列的数字之和为0,算一种
for (int i = 1; i <= target; ++ i)
{
for (int &num : nums)
{
if (i >= num)
{
dp[i] += dp[i - num]; //状态转移方程
}
}
}
return dp.back();
}
};