DP的问题让我这个小白很头疼,其实我做算法题目很久了,有快乐的回忆,也有不快乐的回忆。当我大一的时候,就接触了算法题目,并且觉得很喜欢,但是直到大四,我还在搞一些简单的算法题。我始终不知道问题出在哪儿,这让我四年的大学过得虚伪又虚度。但过去的事情就过去了,问题出现在我只想满足自己多巴胺,不敢去真的挑战那些我不会的东西。历史不会原谅任何一个人,也不会记住任何一个不值得被原谅的人。当我错过很多精彩的时候,我应该打碎镜子,认认真真的用心看着自己。也用最近看到的一句话送给自己:潜龙在渊,腾必九天。


硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入: n = 5输出:2解释: 有两种方式可以凑成总金额:
5=5
5=1+1+1+1+1示例2:输入: n = 10输出:4解释: 有四种方式可以凑成总金额:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1说明:注意:你可以假设:0 <= n (总金额) <= 1000000来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我发现很多博客是直接从动态规划上讲起,我参考的是这篇博客【https://blog.csdn.net/HelloZEX/article/details/81205940】。这对于一个想解答问题,并且弄明白DP算法思路的小白来说,直接接受是很痛苦的。然后我就在纸上模仿着,画了一个二维表:


硬币的面值有:coins = [1, 5, 10, 25],dp[j] 表示 使用四种硬币组成 j 元的组合数。
当只有 面值为 1 的硬币, dp[j] = 1,无论 j 为何值。
增加一种面值为 5 的硬币,为了区别前面的 dp[j] ,这个时候 记作 dp_new[j]:
如果 j < 5,那么, dp_new[j] = dp[j], 因为新面值没有被使用。
如果 j = 5, 那么,dp_new[j] = dp[j] + 1, 因为相较于只有面值 1 的时候,现在刚好会增加一种方案(使用一个5元的硬币)。
如果 j > 5,那么, dp_new[j] = dp[j] + dp_new[j-5],因为除了只有面值 1 的时候的方案数,新增加的面值会有新的方案数。
为什么新增 面值为 5 硬币后,新增方案数为 dp_new[j-5]?
我是那么理解的:我增加一个面值为 5的,那么剩下的金币组成数就是dp_new[j] 中,用新增面值进行组合的组合数。

代码:

class Solution {public:int waysToChange(int n) {int dp[4][n+2];for(int i=0; i<=n; i++)dp[0][i] = 1;int coin[4] = {1,5,10, 25};for(int i=1; i<4; i++)for(int j=1; j<=n; j++){if(j < coin[i])dp[i][j] = dp[i-1][j];else if( j==coin[i])dp[i][j] = dp[i-1][j] + 1;elsedp[i][j] = dp[i-1][j] + dp[i][j-coin[i]];}return dp[3][n];}
};

其实,我最早的想法使用的是组合数学,但是学的不好,求不出来。。。
然后看到帖子上,有一个用 bfs的,我当时也想了一下,但立马觉得空间太大,搜索很浪费时间。

leetcode-004-0811. 硬币相关推荐

  1. LeetCode 1230. 抛掷硬币(DP)

    文章目录 1. 题目 2. 解题 1. 题目 有一些不规则的硬币.在这些硬币中,prob[i] 表示第 i 枚硬币正面朝上的概率. 请对每一枚硬币抛掷 一次,然后返回正面朝上的硬币数等于 target ...

  2. LeetCode 441. 排列硬币(数学解方程)

    1. 题目 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整型的范围 ...

  3. LeetCode - 441 - 排列硬币(arranging-coins)

    Create by jsliang on 2019-07-29 16:15:532019-07-29 17:09:31 一 目录 不折腾的前端,和咸鱼有什么区别 | 目录 | | --- | | 一 ...

  4. Java实现 LeetCode 441 排列硬币

    441. 排列硬币 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整 ...

  5. leetcode 441. 排列硬币(Java版)

    题目 https://leetcode-cn.com/problems/arranging-coins/ 题解 代码 for 循环中相乘要用 long,否则大数情况下会溢出 class Solutio ...

  6. LeetCode.004 Median of Two Sorted Arrays

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  7. 2022-2-5 Leetcode 441.排列硬币

    // class Solution {// public: // int arrangeCoins(int n) {// int i = 1; // for(;((1+i)*i)/2 <= n; ...

  8. 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数

    题目:LeetCode 004 Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m an ...

  9. LeetCode题解目录

    最新更新于2020.11.27 前往LeetCode主页. 前往GitHub源码.(服务器原因,暂停同步.) 前往码云主页. 已解决 456/1878 - 简单353 中等 90 困难 13 2020 ...

  10. excel更改日期格式无效_Excel日期不会更改格式

    excel更改日期格式无效 Have you ever imported data into Excel, from your credit card statement, or somewhere ...

最新文章

  1. bzoj 1877: [SDOI2009]晨跑 (网络流)
  2. 学Java怎么样?学Java从业前景如何呢?
  3. [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)
  4. java 虚拟机_浅谈Java虚拟机内存区
  5. Python:课程期待
  6. centos 使用mutt发送邮件带附件
  7. 关于树的递归问题的一些总结
  8. 设计灵感|双重曝光放在海报里原来这么好看!
  9. 前端JavaScript 常见的报错及异常捕获与处理方法
  10. int sel 在c语言表示,C语言教程ch1初识C程序.ppt
  11. JavaScript中内存使用规则--堆和栈
  12. # 【CrackMe】0-爆破之Acid burn
  13. 犀牛脚本插件-python-vb-编辑使用方式-rhino脚本插件
  14. 史上超强图像处理开源工具包--ImageMagick
  15. 跟着猴博士复试概率论(第二部分)
  16. Codeforces Round #840 (Div. 2) and Enigma 2022 - Cybros LNMIIT题解
  17. 机器学习之LASSO,岭回归
  18. pdfminer __init__() got an unexpected keyword argument ‘codec‘解决方案
  19. EXP-00002错误解决方法
  20. 玩转Python :获取微信好友个性签名生成词云

热门文章

  1. 关于NTU-RGB+D数据集skeleton数据
  2. Android 10.0 关机对话框UI定制化开发(一)
  3. 凸优化_Stephen_Boyd_
  4. 基于Java毕业设计学习类视频网源码+系统+mysql+lw文档+部署软件
  5. 关于我的电脑显示一直处理中解决办法
  6. java获取秒时间_关于java:以秒为单位获取当前时间
  7. LeetCode-动态规划-518-零钱兑换II
  8. 《软件设计的哲学》(三)【复杂性的本质】
  9. 黑马程序员--SpringBoot---基础篇
  10. matlab填充封闭包含区域,求指导matlab怎么填充曲线构成的封闭区域