我做运动:

“You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.”

Example 1:

coins = [1, 2, 5], amount = 11

return 3 (11 = 5 + 5 + 1)

我还用谷歌搜索这样的解决方案:

public class Solution {

public int coinChange(int[] coins, int amount) {

int dp[] = new int[amount + 1];

final int INF = 0x7ffffffe;

for (int i = 1; i <= amount; i++) dp[i] = INF;

for (int i = 0; i <= amount; i++) {

for (int j = 0; j < coins.length; j++) {

if (i + coins[j] <= amount)

dp[i + coins[j]] = Math.min(dp[i + coins[j]], dp[i] + 1);

}

}

return dp[amount] == INF ? -1 : dp[amount];

}

}

我知道关于DP的知识,但是,我对此感到非常困惑,例如dp [i coin [j]]的含义是什么,为什么加i,为什么dp [i] 1,为什么加1?

谁能用简单的英语显示出路?

解决方法:

好的,让我们首先看看该代码在做什么和正在使用什么. DP用于存储一定值所需的硬币数量.这样做的目的是为了获得值所需的硬币数量只是“ dp的值项”.但是,我们如何得到该金额的有序列表?

他使用内部for循环遍历他拥有的所有硬币,试图将硬币的值添加到当前值(i).如果该值小于目标数量,则将为其分配一个值.

dp[i + coins[j]] = (...)

我们知道列表是按值排序的,我们将通过获取当前条目(i)的值加上当前硬币(coins [j])的值来获得需要更改的条目的值.那是它的左边.

现在到了正确的部分:您正在寻找可能的最小数量,因此您正在使用Math.Min来获取n个参数中的较小者,在这种情况下为两个.第一个参数是我们将要覆盖的值.如果我们已经找到了一种表示值的好方法,为什么要覆盖它呢?我们可能会不小心杀死它,因此我们确保只有在找到不比所获得的更好的解决方案时才这样做.第二个参数只是我们要达到当前值1所需的硬币数量.

(...) = Math.min(dp[i + coins[j]], dp[i] + 1);

如果您还不太了解,请随时询问更多详细信息:)

标签:java

来源: https://codeday.me/bug/20191027/1944755.html

java dp处理_Java-对DP解决方案的硬币更改理解相关推荐

  1. java销毁定时器_Java 定时器退出解决方案

    项目中用到了 Timer 每隔一段时间进行一些操作,现在发现有时候莫名其妙地挂在这个计时器上的操作都不做了,用"JConsole"查看其中的线程以后,发现这个定时器线程也不在了(定 ...

  2. java初始化实例化_Java 类初始化和实例化以及多态理解

    前言 本篇主要讲解了类的初始化.实例化.静态代码块.构造器.getClass().super.this 等相关的知识点,做一个总结. demo 老规矩,看代码: Father.java public ...

  3. java反向注入_java 控制反转和依赖注入的理解

    开始好好学习java基础和思想~ 控制反转(IOC)是Spring框架的核心思想,用我自己的话说,就是你要做一件事,别自己可劲new了,你就说你要干啥,然后外包出去就好~ 依赖注入(DI) 在我浅薄的 ...

  4. java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?

    小伙伴们知道如何在java栈中内存动态扩展吗?这是虚拟机中的一个概念,下面让我们一起来看看该如何实现吧. 一.内存概念 在java中,我们一般会简单把java内存区域划为两种:堆内存与栈内存.其实这种 ...

  5. java直接引用_Java虚拟机 - 符号引用和直接引用理解

    我了解了调用函数时符号引用如何转换为直接引用的,但是对于类变量,实例变量的解析方法还是不太清楚. 符号引用是只包含语义信息,不涉及具体实现的:而解析(resolve)过后的直接引用则是与具体实现息息相 ...

  6. Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...

  7. java的冒泡_Java实现冒泡排序

    Java实现冒泡排序 Java实现冒泡排序 冒泡排序是一种不断交换相邻的元素的排序,一些元素在不断得被交换中,就像水中冒泡一样,因此得名冒泡排序. 1.比较相邻的元素,如果前面元素比后面元素要小,那么 ...

  8. 树形dp ---- 树形换根dp F - The Maximum Subtree

    题目链接 题目大意: 给定一颗树,求这个树的最大子树,且这个子树是一个good-tree. good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交 解题思路 ...

  9. 计算价格, java中浮点数精度丢失的解决方案

    计算价格, java中浮点数精度丢失的解决方案 转载于:https://www.cnblogs.com/gloryhope/p/9896719.html

最新文章

  1. 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
  2. python的工作方向-Python的就业的方向和前景
  3. 计算机科学与控制面试说课,计算机科学与技术专业的说课.pptx
  4. 怎样在 Centos 6.8 中安装 Elasticsearch 5.2
  5. 中国企业借东博会“走出去”将打造马来西亚首个智慧城市
  6. C/C++浮点数在内存中的存储方式《转》
  7. Centos6.9编译安装nginx1.14.0
  8. 移动办公平台忘记密码怎么办?移动办公平台下载
  9. 340-写一个银行转账死锁问题并且解决
  10. QEMU 安装与使用
  11. 2018宝鸡市高三数学第一次质量检测
  12. 在TITAN RTX 2080Ti 上安装 Ubuntu18.04+Nvidia-430显卡驱动+配置深度学习环境(1)
  13. 白手起家学习使用flex (5) 在Flash Builder5 中引用 fla 文件中的类( symbol )
  14. 赋能型生态演化路径与六大竞争制高点——保险科技生态建设...
  15. 如何加快计算机绘图的速度,如何提高Auto CAD 做图速度
  16. android系统将普通应用升级为系统应用
  17. 短视频是一种值得被鼓励的创作形式么?
  18. Java:一个API文档框架Swagger
  19. WebMatrix进阶教程(9):如何部署网站
  20. 《趣谈网络协议》学习笔记 DAY04

热门文章

  1. 1021: 机器人走迷宫
  2. BIGO面试经历20190902
  3. SOLIDWORKS软件之ToolBox汉化与属性更改
  4. 模式识别-期末复习简答题(87个知识点、问题集锦|已完结)
  5. android gridLayout
  6. Photoshop切图实例
  7. CIDR合并Java_CIDR
  8. pandas / python使用技巧-统计频次,超级实用
  9. egret引入外部字体
  10. Linux 中断控制器(五):中断号映射