零钱兑换2
代码
class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<int> dp(amount + 1, 0<details>
dp[0] = 1;
for (int j = 0; j <= amount; ++j) {
for (int i = 0; i < coins.size(); ++i)
if (j >= coins[i]) { dp[j] += dp[j - coins[i]];
cout << "dp[" << j << "] += dp[" << j - coins[i] << "]" << endl;}
}
return dp[amount];
}
};
详解
以测试数据 5 【1,2,5】
为例
- 组合数,外层遍历coins(i)
dp[1] += dp[0] dp[2] += dp[1] dp[3] += dp[2] dp[4] += dp[3] dp[5] += dp[4] dp[2] += dp[0] dp[3] += dp[1] dp[4] += dp[2] dp[5] += dp[3] dp[5] += dp[0]
- 排列数,外层遍历amount(j)
dp[1] += dp[0] dp[2] += dp[1] dp[2] += dp[0] dp[3] += dp[2] dp[3] += dp[1] dp[4] += dp[3] dp[4] += dp[2] dp[5] += dp[4] dp[5] += dp[3] dp[5] += dp[0]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?