题目描述
思路
动态规划模板与我写的零钱兑换一个样子
伪代码
for i 1~target 左闭右闭
for num:nums
dp[i] += dp[i-num] \\试探
return dp[target]
代码
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<unsigned long long> dp(target+1,0);
//思路 dfs 与换零钱类似
//例如nums = [1,2,5] target = 7;
//dp[5] = dp[1] + dp[2] + dp[5]
dp[0]=1;
for(int i=1;i<=target;i++)
{
for(auto num:nums)
{
if(i>=num)
{
dp[i]+=dp[i-num];
}
}
}
return dp[target];
}
};
重难点
数据溢出
dp初始化 dp[0] = 1 <<<<>>>>>dp[1] = dp[0] +d[1] = 1