当前位置: 首页 > article >正文

LeetCode:322.零钱兑换

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:322.零钱兑换
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。
示例 1:
输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
示例 2:
输入:coins = [2], amount = 3
输出:-1
示例 3:
输入:coins = [1], amount = 0
输出:0

  • 本题求的是最少硬币数,既不是排列问题也不是组合问题,所以两个for循环的顺序都可以
  • dp[j]含义:装满容量为j的背包的最少硬币数
  • 注意非0下标的初始值需要为Integer.MAX_VALUE0下标的初始为0
  • 递推公式:dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1),即nums[i]装还是不装
  • 如果dp[j - coins[i]] == maxValue 则不符合,需要剔除,递推公式会溢出
	public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount + 1];
        int maxValue = Integer.MAX_VALUE;
        // 0下标需要初始话为0, 非0下标初始化为最大值,因为下面求的是 Math.min
        Arrays.fill(dp, maxValue);
        dp[0] = 0;
        for (int i = 0; i < coins.length; i++) {
            for (int j = coins[i]; j <= amount; j++) {
                // 注意这个if,如果dp[j - coins[i]] == 最大值(那么再加1就会溢出!)
                // 即选择nums[i]也到不了amount,只有不是最大值时才考虑
                if (dp[j - coins[i]] != maxValue)
                    dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
            }
        }
        return dp[amount] == maxValue ? -1 : dp[amount];
    }

http://www.kler.cn/a/528075.html

相关文章:

  • pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)
  • 侯捷 C++ 课程学习笔记:深入理解 C++ 核心技术与实战应用
  • 【C++ 数学 括号匹配】2116. 判断一个括号字符串是否有效|2037
  • JSP 标准标签库(JSTL)
  • unity学习21:Application类与文件存储的位置
  • three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)
  • el-table组件样式如何二次修改?
  • 【Linux】CentOS8虚拟机的基本环境配置
  • python中的if判读
  • C语言基础5
  • javascript-es6(三)
  • vscode script 中间的function import等关键字 先高亮,然后又灰了,并且按ctrl+/ 注释以html的形式,导致报错处理
  • 前端八股CSS:盒模型、CSS权重、+与~选择器、z-index、水平垂直居中、左侧固定,右侧自适应、三栏均分布局
  • 9.2k star!PiliPala一个第三方B站客户端!
  • 【LLM-agent】(task4)搜索引擎Agent
  • 知识管理平台如何实现企业知识共享与创新能力的全面提升
  • 【PHP】基于 PHP 的图片管理系统(源码+论文+数据库+图集)【独一无二】
  • DNS缓存详解(DNS Cache Detailed Explanation)
  • 核心集:DeepCore: A Comprehensive Library for CoresetSelection in Deep Learning
  • 分页按钮功能
  • 区块链项目孵化与包装设计:从概念到市场的全流程指南
  • Github 2025-02-01 开源项目月报 Top20
  • 使用PyQt5绘制带有刻度的温度计控件
  • 第十二章 I 开头的术语
  • Java数据结构和算法(一)
  • 【Java异步编程】CompletableFuture综合实战:泡茶喝水与复杂的异步调用