题目

硬币。给定数量不限的硬币,币值为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

解题思路

首先根据题目的意思,这明显是一个完全背包问题,只不过不同以往,这里要求求取可实现的方法次数,所以背包方式的求解就不再说,今天带来一种数学思维的求解方式,就算你没有学过算法【动态规划】,也应该能做出这道题。

1、根据题意,我们可以得出这样的公式(a枚25分的硬币,b枚10分硬币、c枚5分硬币、d枚1分硬币),根据它给出的硬币种类,所以不管给出多少分的数,都能被这四种硬币所组成(降低了难度)。
          25a + 10b + 5c + d =n;

2、根据所列式子,我们可以得出如果我们取出 i 枚25分硬币,剩下的数量就留给了10 、5 、1 分的硬币去构成,假设当25分硬币数为 a时,【result1 = n - 25a 】,所以I的取值为【0,n/25】;.

3、b、c、d又可以继续按照第二步骤的方法继续进行分,那么【ressult2 = result1-10b】,因此b的取值为【0,result1/10】;

4、因此c的取值为【0,result2/5】;因为【ressult2 = result1-10b】,则c的取值为【0,result1/5-2b】;

5、当a,b,c定了,d的值也就自然定下来了。因此,所有的表示种类,即为 a、b、c可取值数的组合。

6、b、c、d的不同表示种类有:

7、可能你会很奇怪的问:“为啥要 +1 啊?”,那我问你,它的零不是一种情况吗?对吧。所以相对于b、c、d的取值情况,可获取如下式子:

8、解决了b、c、d的取值,之后便处理a的情况:

代码

class Solution {public:int waysToChange(int n) {const int mod  = 1000000007; int res = 0;for (int i = 0; i <= n / 25; i ++) {int result = n - i * 25;int a = result / 5;int b = result / 10;res += (long long)(a + 1)*(b + 1) % mod - (long long)b*(b + 1)% mod;res %= mod;}return res;}
};

硬币(Leetcode)相关推荐

  1. LeetCode题解目录

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

  2. ​LeetCode刷题实战450:删除二叉搜索树中的节点

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. Leetcode题解(超赞!!!)

    我是技术搬运工,好东西当然要和大家分享啦.原文地址 算法思想 二分查找 二分查找思想简单,但是在实现时有一些需要注意的细节: 在计算 mid 时不能使用 mid = (l + h) / 2 这种方式, ...

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

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

  5. excel 日期选择器_Excel日期选择器工具

    excel 日期选择器 If you'd like a quick and easy way to add dates in a worksheet, you can use this handy d ...

  6. LeetCode1-620题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  7. LeetCode1-580题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到560道题了.今天把发布的1-560篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  8. LeetCode1-560题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到560道题了.今天把发布的1-560篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  9. LeetCode1-540题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到520道题了.今天把发布的1-520篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

最新文章

  1. 中小型金融企业该如何进行灾备建设?
  2. Centos配置终端的快捷键
  3. linux rpm命令 查询包安装与否、包详细信息、包安装位置、文件属于哪个包、包依赖
  4. 二叉树总结—建树和4种遍历方式(递归非递归)
  5. RocketMQ集成SpringBoot
  6. mysql的中文乱码url,MySQL 中文显示乱码
  7. C/C++[codeup 2018]数列
  8. 知识分享|日本面试常考问题+巧妙回答 ②
  9. 基于Visual studio+Opencv+Python的透视变换、图像处理(灰度化、二值化、Canny边缘检测)模型——以2015数学建模A题太阳影子定位为例
  10. 西门子S7200PLC连接CHNet-S7200PD实现以太网通信配置方法
  11. ZigBee(CC2530)(03)数据手册分享(英文+中文)
  12. 计算机文化基础(高职高专版 第十一版)第七章 答案
  13. LivePlayer H5播放器、在react中使用
  14. 机器学习-决策树算法
  15. Docker 第三章 容器
  16. 教老婆学java系列之奇妙的数据结构三
  17. 转载java基础总结大全(使用)
  18. Activiti 7流程跳转
  19. java实现邮箱验证QQ邮箱验证和Foxmail验证
  20. Linux简单指令练习

热门文章

  1. 【CSS 教程系列第 3 篇】CSS 如何添加注释
  2. 科学家与超级计算机结合,科学家计算出银河系质量:约为2100亿个太阳
  3. 初入职场“荒野求生”,五条靠谱的生存指南
  4. VB.net学习笔记(二十九)认识STA与MTA
  5. Swift UILabel 数字动画效果
  6. 笑能降血压,笑还能释放压力,减轻沮丧感;笑可以刺激人体分泌多巴胺,使人产生欣快感
  7. WSDM‘22推荐系统论文梳理
  8. 图的广度优先遍历-06-图3 六度空间
  9. c语言 的意思啊,c语言中!1是什么意思啊
  10. 朴素贝叶斯——垃圾邮件过滤