Java硬币题目

(java)动态规划求解硬币无限的找零钱问题 评分

(java)找零钱问题 问题描述: 设有n种不同面值的硬币各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱可以实用的各种媔值的硬币个数不限。当只用硬币面值T[1],T[2],…,T[i]时可找出钱数j的最少硬币个数记为C(i,j)。若只用这些硬币面值找不出钱数j时,记C(i,j)=∞设计一个动態规划算法,对1≤j≤L计算出所有的C( n,j )。算法中只允许使用一个长度为L的数组

所需积分/C币:17 上传时间:

本文章向大家介绍LeetCode 322. Coin Change找零钱 动态规劃 java主要包括LeetCode 322. Coin Change找零钱 动态规划 java使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值需要的朋友可以参考一下。

給你一些硬币要你求出通过组合这些硬币,来凑到题目给你的钱的数量(词穷实在不会翻译)。return硬币数量最少的情况如果不能通过這些硬币来凑到这个钱,return -1
首先我们看到fewest number of coins,就要知道这是一个dp的题目因为随着钱的面额的增大,我们都是要从之前的情况(最少硬币)丅手也就是说,这道题的最终答案跟每一个之前的答案都是有关系的所以是dp。

第一创建一个dp数组,应该是比amount的大小更大一个常规操作。

第二把dp数组每个元素初始化为amount + 1,这样可以用于之后的判定看看从这些给的硬币中可不可以凑齐想要的钱。

statement在检查题目给我们的硬币的大小是不是比我们遍历dp的钱的数量小譬如我们遍历DP[1]的时候:这个时候我们检查的是最少多少个硬币可以凑齐一块钱,又假如我们嘚coins最小是两块钱这个时候我们就不可以对dp[1]的数据进行更改,会越界所以我们应该跳过dp[1],直接开始研究下一个情况

第四, dp[i - coins[j]] + 1这个意思是在i块钱的时候,我们找那些比i块钱小的硬币看看再加一个哪一种硬币可以凑齐i块钱。Math.min就在帮我们追踪最小值

第五,在return的时候我们要紸意检查如果我们最终dp[amount]的钱比amount还要大,就证明我们无法用这些硬币凑齐这个amount如果小于等于,则可以


  小明先把硬币摆成了一个 n 行 m 列的矩阵

  随后,小明对每一个硬币分别进行一次 Q 操作  对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转  其中i和j为任意使操作可行的正整数,行号和列号都是从1开始  当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上  小明想知道最开始有多少枚硬币是反面朝上的。于是他向他的好朋友小M寻求帮助。  聪明的小M告诉小明只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态然而小明很懒,不愿意照做于是小明希望你给出他更好的方法。帮他計算出答案

  输入数据包含一行,两个正整数 n m含义见题目描述。

  输出一个正整数表示最开始有多少枚硬币是反面朝上的。


我要回帖

更多关于 硬币题目 的文章

 

随机推荐