java零钱兑换(力扣Leetcode322)

零钱兑换

力扣原题链接

问题描述

给你一个整数数组 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

分析

这是一个典型的动态规划问题。我们需要计算可以凑成总金额所需的最少硬币个数。

我们可以定义一个动态规划数组 dp,其中 dp[i] 表示凑成金额 i 所需的最少硬币个数

状态定义

定义一个一维动态规划数组 dp,其中 dp[i] 表示凑成金额 i 所需的最少硬币个数。

状态转移方程 (解决最少个数/价值最小化问题)

对于每一个金额 i,我们需要遍历所有硬币面额 coin,然后更新动态规划数组 dp[i]。状态转移方程为:

dp[i] = Math.min(dp[i], dp[i - coin] + 1);

初始化

我们需要对动态规划数组进行初始化。初始时,除了 dp[0] = 0 外,其余元素初始化为一个较大的数,例如 Integer.MAX_VALUE

Java解题

class Solution {public int coinChange(int[] coins, int amount) {// 创建一个动态规划数组 dp,其中 dp[i] 表示凑成金额 i 所需的最少硬币个数int[] dp = new int[amount + 1];// 初始化动态规划数组 dpArrays.fill(dp, Integer.MAX_VALUE);dp[0] = 0;// 写法一for (int i = 1; i <= amount; i++) {//遍历背包// 遍历硬币数组 coinsfor (int coin : coins) {//遍历物品// 如果当前金额大于硬币面额 coin,则更新动态规划数组 dpif (i >= coin && dp[i - coin] != Integer.MAX_VALUE) {dp[i] = Math.min(dp[i], dp[i - coin] + 1);}}}// 写法二for (int i = 0; i < coins.length; i++) {//遍历物品// 对于每个硬币面额,从该面额开始遍历到总金额 amountfor (int j = coins[i]; j <= amount; j++) {//遍历背包// 如果凑成金额 j - coins[i] 的组合存在(不为 Integer.MAX_VALUE)if (dp[j - coins[i]] != Integer.MAX_VALUE) {// 更新凑成金额 j 的最少硬币个数,取当前组合和之前组合中较小的个数dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}// 返回凑成总金额所需的最少硬币个数return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
}

总结

通过动态规划的思想,我们可以解决这个问题。首先初始化动态规划数组,然后根据状态转移方程进行状态转移,最终返回凑成总金额所需的最少硬币个数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数递归的总结回顾

函数递归的本质就是其名字——递与归。先递出去&#xff0c; 再收回来。 而递归的思想就是为了让一个复杂的问题变成一个简单的问题 按照我目前的理解&#xff0c;函数递归有两点很重要。一个是它的限定条件&#xff0c;另一个就是函数体内“自调”&#xff08;就是自我调用语句…

1-Flume中agent的source

Flume&#xff08;1.11.0版本&#xff09; 简介 概述 Flume本身是由Cloudera公司开发的后来贡献给了Apache的一套针对日志数据进行收集(collecting)、汇聚(aggregating)和传输(moving)的机制 Flume本身提供了简单且灵活的结构来完成日志数据的传输 Flume有两大版本&#x…

jQuery 选择器--获取元素

文章目录 1 jQuery 基础选择器2 层级选择器3 隐式迭代(重要)4 jQuery 筛选选择器5 jQuery 筛选方法(重点)案例--下拉菜单 6 jQuery 排他思想*案例--左右Tab栏切换 7 jQuery 链式编程 1 jQuery 基础选择器 2 层级选择器 3 隐式迭代(重要) 示例&#xff1a; 4 jQuery 筛选选择器…

oracle表备份及还原

工作中&#xff0c;经常使用Navicat访问及操作Oracle数据库&#xff0c;备份表非常方便Ctrlc、Ctrlv&#xff1b;最近备份表&#xff0c;发现这种操作有问题&#xff1b;数据表有2条检查&#xff0c;使用Ctrlc、Ctrlv操作&#xff0c;发现新备份的表出现4条检查&#xff0c;再对…

Python实战:命令行工具开发

本文将深入探讨如何使用Python开发一个命令行工具。我们将从项目规划、功能实现、用户交互、错误处理和测试等方面进行详细讲解。我们将展示如何使用Python标准库中的argparse模块来处理命令行参数&#xff0c;以及如何构建一个功能完整、易于使用的命令行工具。 一、引言 命…

冷库制冷量计算与机组、换热器、膨胀阀选型配管

1、冷库冷负荷估算: 能计算出冷库耗冷量需要提供的最基本条件: 货物种类; 库房尺寸(长宽高); 储藏量,吨; 进货量,吨/天; 冷却时间,小时; 进货温度,℃; 出货温度,℃。 2、冷库贮存量计算: 冷库吨位计算公式:G=∑Vlρsη/1000 式中: G—冷库吨位(t); Vl—冷…

流畅的 Python 第二版(GPT 重译)(十二)

第五部分&#xff1a;元编程 第二十二章&#xff1a;动态属性和属性 属性的关键重要性在于&#xff0c;它们的存在使得将公共数据属性作为类的公共接口的一部分完全安全且确实可取。 Martelli、Ravenscroft 和 Holden&#xff0c;“为什么属性很重要” 在 Python 中&#xff0…

前端如何一次处理十万条数据的渲染

前端如何一次处理十万条数据的渲染 一、下载第三方插件二、在入口文件引入三、示例 一、下载第三方插件 npm install --save el-table-infinite-scroll二、在入口文件引入 import ElTableInfiniteScroll from "el-table-infinite-scroll"; Vue.use(ElTableInfinite…

docker 配置国内阿里镜像源

在/etc/docker/目录下新建daemon.json文件 在文件中写入 {"registry-mirrors": ["https://jmphwhtw.mirror.aliyuncs.com"] } 以管理员身份运行命令 systemctl daemon-reload systemctl restart docker

项目中如何进行限流(限流的算法、实现方法详解)

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 限流的算法漏…

MFO-CNN-LSTM多输入分类预测|飞蛾扑火算法优化的卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

最新优质电商API接口,附带Python教程

接口信息 API 接口是应用程序编程接口&#xff08;Application Programming Interface&#xff09;的缩写。 它是一组定义了软件组件之间如何交互和通信的规则和规范。简单来说&#xff0c;API 接口就是让不同的软件系统能够相互“交流”和“合作”的桥梁。打个比方&#xff…

onlyoffice第一次打开特别慢的问题优化

分析问题 上传oss 找到fonts上传到oss中 更改nginx配置 找到nginx所在位置 找到ds-docservice.conf #### onlyoffice二次开发&#xff0c;优化fonts请求速度的问题 location ~* /8.0.0-99/fonts(.*){return https://xxxx-xxxx.cos.ap-shanghai.myqcloud.com/fonts$1?…

jQuery 基础

文章目录 1. jQuery 概述1.1 JavaScript 库1.2 jQuery 概念1.3 jQuery 优点 2. jQuery 基本使用2.1 下载2.2 使用步骤2.3 jQuery 的入口函数2.4 jQuery 的顶级对象 $2.5 DOM 对象和 jQuery 对象DOM 对象和 jQuery 对象相互转换方法 1. jQuery 概述 1.1 JavaScript 库 1.2 jQue…

一篇文章带你了解知乎热门话题的撰写技巧

在当今信息高速发展的时代&#xff0c;人们越来越依赖网络获取知识。而知乎作为一个知识分享和知识传播的平台&#xff0c;吸引了大量用户的关注和参与。那么&#xff0c;如何在知乎上撰写一篇引人注目的文章呢&#xff1f;接下来&#xff0c;腾轩科技传媒探讨一下知乎文章的撰…

el-carousel使用循环,el-carousel-item里继续循环

简述 vue项目使用elementui&#xff0c;有一个需求。首先使用el-carousel-item实现一个多页的走马灯。这个可以使用v-for来实现多页。然后有一个数组对象arr有18个元素。我要把arr放在el-carousel-item里面&#xff0c;但是每个el-carousel-item里只能放两个arr元素&#xff0…

活动回顾 | 走进华为向深问路,交流数智办公新体验

3月20日下午&#xff0c;“企业数智办公之走进华为”交流活动在华为上海研究所成功举办。此次活动由上海恒驰信息系统有限公司主办&#xff0c;华为云计算技术有限公司和上海利唐信息科技有限公司协办&#xff0c;旨在通过对企业数字差旅和HR数智化解决方案的交流&#xff0c;探…

MySQL之基本操作与用户授权

一 基本操作 1 SQL分类 数据库&#xff1a;database 表&#xff1a;table&#xff0c;行&#xff1a;row 列&#xff1a;column 索引&#xff1a;index 视图&#xff1a;view 存储过程&#xff1a;procedure 存储函数&#xff1a;function 触发器&#xff1a;trigger 事…

【强化学习公式推导】状态价值函数与动作价值函数贝尔曼期望方程,贝尔曼最优方程推导过程

【强化学习公式推导】状态价值函数与动作价值函数贝尔曼期望方程&#xff0c;贝尔曼最优方程推导过程 1.回报 2.当前时刻的回报与下一时刻回报的关系 3.状态价值函数 4.动作价值函数 5.状态价值函数与动作状态价值函数的关系 6.贝尔曼期望方程 7.状态价值函数的贝尔…

迷宫(蓝桥杯)——DFS和BFS

迷宫 题目描述 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这 个它的上、下、左…