题目:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

你可以认为每种硬币的数量是无限的。

class Solution {
/*
本题属于完全背包问题:
本题中的dp数组的下标和含义要依据题意来变一下
dp[j] 凑足总金额为 j 所需铅笔的最少个数为 dp[j]求最小就需要将除了第一个元素之外的值 初始化为 INT_MAX,
同时,因为有了INT_MAX所以要多一句 if 判断来防止溢出。动规五部曲:
1、确定dp数组及其下标含义
dp[j] 凑足总金额为 j 所需铅笔的最少个数为 dp[j]2、确定递推公式
①:考虑coins[i]时: dp[j] = dp[j]
②:不考虑coins[i]时:dp[j] = 1 + dp[j - coins[i]]取两者中的最小值:dp = min(dp[j], 1 + dp[j - coins[i]])3、dp数组初始化
j = 0 时,对应的 dp[j] = 0
j 为其他下标时,dp[j] = INY_MAX,将其初始化为一个最大数,为了避免在 min() 求最小值比较的过程中被初始值覆盖4、确定遍历顺序
本题不强调物品与背包的遍历顺序,两种都可以的
此处采用先遍历物品,再遍历背包容量,内层循环用正序不懂的地方,就是为什么循环里面的 dp 语句多加了一个 if 判断呢???????????
*/
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;// 组合问题,先遍历物品,再遍历背包重量for(int i = 0; i < coins.size(); ++i){// j <= amount 再一次把 amount 给忘掉了for(int j = coins[i]; j <= amount; ++j){// 相比于别的背包问题,这里多了一个判断条件?????????why// 防止溢出哦~ 假设输入为 coins={2} amount=3,不信你试试if(dp[j - coins[i]] != INT_MAX){// 如果dp[j - coins[i]]是初始值则跳过,不进入 ifdp[j] = min(dp[j], 1 + dp[j - coins[i]]);}}}// cout << INT_MAX;if(dp[amount] == INT_MAX)   return -1;return dp[amount];}
};

leetcode——第322题——零钱兑换相关推荐

  1. LeetCode题组:第322题-零钱兑换

    1.题目 难度:中 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输 ...

  2. [Leetcode][第322题][JAVA][零钱兑换][回溯][记忆化搜索][动态规划]

    [问题描述][中等] [解答思路] 1. 递归(超时) class Solution {int res = Integer.MAX_VALUE;public int coinChange(int[] ...

  3. leetcode算法题--零钱兑换

    原题链接:https://leetcode-cn.com/problems/coin-change/ 相关题目:leetcode算法题–完全平方数★ 动态规划 dp[i] i从0到amount,dp[ ...

  4. leetcode 322: 零钱兑换

    题目描述: 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额. 计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组合能组成总金额,返回 ...

  5. 【LeetCode每周算法】零钱兑换

    题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 a ...

  6. LeetCode刷题复盘笔记—一文搞懂完全背包之322. 零钱兑换问题(动态规划系列第十四篇)

    今日主要总结一下动态规划完全背包的一道题目,322. 零钱兑换 题目:322. 零钱兑换 Leetcode题目地址 题目描述: 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amo ...

  7. 【必备算法】动态规划:LeetCode题(六)322. 零钱兑换,518. 零钱兑换 II

    322. 零钱兑换² 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: ...

  8. 动态规划——零钱兑换(Leetcode 322)

    题目选自Leetcode 322.零钱兑换 想必大家看一眼就明白了(bushi),这就是动态规划的背包问题~ 算法思想 那么,既然知道了这是个动态规划问题,就要思考如何列出正确的状态转移方程? 1.确 ...

  9. LeetCode:322. 零钱兑换(python)

    LeetCode:322. 零钱兑换(python) 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...

最新文章

  1. Python(25)-单例设计模式
  2. 最新 | 更小、更快、更强!EfficientNetV2:Smaller-Faster-Better
  3. Package vim is not available, but is referred to by another package.
  4. AIR中用户离开状态和返回状态
  5. 简单地使用jquery的validate
  6. QT最常用的字符串操作
  7. 开始写关于ZF的学习教程了
  8. 集群启动/停止方式总结
  9. PLT hook与Inline hook
  10. 如何在IDEA上创建一个JSP项目【亲测有效】
  11. rose服务器系统,ROSE HA 服务器集群软件
  12. 惠普的软件定义IT和芯片级安全
  13. python下载迅雷资源助手_NAS下载丨比第三方好用100倍!威联通Download Station支持PT下载教程...
  14. SPI 总线3-line、4-line的定义
  15. 非共识与小趋势——复盘罗辑思维7年演化之路
  16. 机器学习笔记15——决策树(DT)、ID3算法、C4.5算法原理以及python实现案例
  17. Kotlin: Classifier ‘Demo1‘ does not have a companion object, and thus must be initialized here
  18. ETC卡 PSAM卡消费流程(转载)
  19. AE影视后期特效制作深入剖析AE表达…
  20. java pppoe_PPPoE拨号流程

热门文章

  1. IPCam的启动过程和工作流程
  2. 计算机防火墙知识点,防火墙及防火墙的基本概念-信息安全工程师知识点
  3. 图像合成——套索工具初使用
  4. php 关于php时区时间错误问题 date 当前时间 时差(转载)
  5. arm 驱动基础:点亮led_firt
  6. Reacte路由报错:A <Route> is only ever to be used as the child of <Routes> element, never rendered direct
  7. 网站SEO关键词优化技巧
  8. 人工智能将从5大方面改变企业IT
  9. H3C BGP与IGP交互配置
  10. python爬取千图网_python爬取lol官网英雄图片代码