LeetCode518. 零钱兑换 II
题目
分析
此题组合问题,首先看能否回溯,数据范围太大,会超时。题目中说一种面额的硬币有无限个,本题为完全背包。本题与LeetCode 494目标和问题几乎一样。
dp[j]表示凑成总额 j 的种类。dp[0] = 1表示总额0不取任何硬币,这也是一种方法,所以为1,若初始值设为0,那么dp数组全为0。递推公式:dp[j] += dp[j-coins[i]]
动态规划求组合类常用的递推公式。
代码
class Solution { public: int change(int amount, vector<int>& coins) { vector<int>dp(amount+1,0); dp[0] = 1; //先遍历背包再遍历容量(即面值) for(int i = 0;i < coins.size();i++){ for(int j = coins[i];j <= amount ;j++){ dp[j] += dp[j-coins[i]]; } } return dp[amount]; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 短信接口被刷爆:我用Nginx临时止血
· 聊聊智商税:AI知识库
· .NET 平台上的开源模型训练与推理进展
· Google发布A2A开源协议:“MCP+A2A”成未来标配?
· C# 多项目打包时如何将项目引用转为包依赖