Leetcode刷题 - 动态规划
322. Coin Change
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Solution { public : int coinChange(vector< int >& coins, int amount) { //动态规划 // 最优解法 // 算出1-11每个数的组成需要的最少硬币数 int nums[amount+1]; nums[0] = 0; // sort coins sort(coins.begin(), coins.end()); // 每个子问题的求解 for ( int i = 1; i <= amount; i ++){ nums[i] = INT_MAX; for ( int val : coins){ if (i - val < 0) break ; if (nums[i-val] != INT_MAX) nums[i] = min(nums[i], nums[i - val] + 1); } } return nums[amount] == INT_MAX ? -1 : nums[amount]; } }; |
518. Coin Change 2
这道题与前面一道不同的是需要找到所有可能的组合数,所以要先从硬币的值着手。
- 从第一个硬币开始,找到 1 ~ amount里这个硬币可以组合的数,若是1,则每个数由1组成的方法只有1种,
- 从第二个硬币开始,循环 i = 0 ~ amount, 找到 i-val 可以组成的方案再加上自己本身可以组成的方案。
- 直到循环完所有的硬币,找到所有可能组成的方案后, nums[amount]就是我们要的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class Solution { public : int change( int amount, vector< int >& coins) { if (amount == 0) return 1; if (coins.size() == 0) return 0; // 动态规划 // 建立一个大小为amount+1的数组 // 需要算有多少组合,从每个coin来看。 // 在1-amount里,单独一个coin可能组成的方案有多少个 // 再loop coins,找到两个组合在一起有多少方案 int nums[amount+1]; // 初始化里面为0 memset (nums,0, sizeof (nums)); // 初始化第一个元素为1,因为算上自己也算一种方案 nums[0] = 1; sort(coins.begin(), coins.end()); for ( int val:coins){ for ( int i = val; i <= amount; i ++){ nums[i] += nums[i - val]; } } return nums[amount]; } }; |
参考资料
- https://leetcode.com/problems/coin-change/discuss/778548/C%2B%2B-DP-solution-explained-~100-Time-100-Space
- https://leetcode.com/problems/coin-change-2/
__EOF__

本文作者:cancantrbl
本文链接:https://www.cnblogs.com/cancantrbl/p/13663332.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cancantrbl/p/13663332.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
分类:
LeetCode刷题
标签:
Leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现