【算法-动态规划】零钱兑换问题-力扣 322

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

        • 1.二维
        • 2.降维

在零钱兑换问题中,要求凑成总金额的最少硬币个数,可以使用动态规划来解决。下面是一个使用 Java 的示例代码来求解这个问题:

1.二维
public class DP_06_ChangeMakingProblemLeetcode322_01 {public int coinChange(int[] coins, int amount) {int max = amount + 1;int[][] dp = new int[coins.length][amount + 1];for (int j = 1; j < amount + 1; j++) {if (j >= coins[0]) {dp[0][j] = 1 + dp[0][j - coins[0]];} else {dp[0][j] = max;}}for (int i = 1; i < coins.length; i++) {for (int j = 1; j < amount + 1; j++) {if (j >= coins[i]) {dp[i][j] = Math.min(dp[i - 1][j], 1 + dp[i][j - coins[i]]);} else {dp[i][j] = dp[i - 1][j];}}print(dp);}int r = dp[coins.length - 1][amount];return r > amount ? -1 : r;}public static void main(String[] args) {ChangeMakingProblemLeetcode322 leetcode = new ChangeMakingProblemLeetcode322();int count = leetcode.coinChange(new int[]{1, 2, 5}, 5);
//        int count = leetcode.coinChange(new int[]{25, 10, 5, 1}, 41);
//        int count = leetcode.coinChange(new int[]{2}, 3);
//        int count = leetcode.coinChange(new int[]{15, 10, 1}, 21);System.out.println(count);}static void print(int[][] dp) {System.out.println("-".repeat(18));Object[] array = IntStream.range(0, dp[0].length + 1).boxed().toArray();System.out.printf(("%2d ".repeat(dp[0].length)) + "%n", array);for (int[] d : dp) {array = Arrays.stream(d).boxed().toArray();System.out.printf(("%2d ".repeat(d.length)) + "%n", array);}}
}
2.降维
public int coinChange(int[] coins, int amount) {// 创建一个数组dp,其中dp[i]表示凑成金额i所需的最少硬币个数int[] dp = new int[amount + 1];// 将dp数组初始化为一个较大的值,这个值大于任何可能的硬币数量Arrays.fill(dp, amount + 1);// 金额为0时,不需要硬币dp[0] = 0;// 动态规划的核心部分for (int i = 1; i <= amount; i++) {for (int coin : coins) {if (i >= coin) {dp[i] = Math.min(dp[i], dp[i - coin] + 1);}}}// 如果dp[amount]仍然是初始值,说明无法凑成该金额,返回-1return dp[amount] > amount ? -1 : dp[amount];
}

这个代码中,我们首先创建一个 dp 数组,将其初始化为一个较大的值(amount + 1),然后将 dp[0]初始化为 0,因为凑成金额 0 不需要硬币。

接下来,我们使用两个嵌套循环遍历金额从 1 到 amount 以及硬币面额数组。对于每个金额 i,我们尝试使用每种硬币,然后更新 dp[i]为达到金额 i 所需的最少硬币数。最后,如果 dp[amount]仍然是初始值,说明无法凑成该金额,返回-1,否则返回 dp[amount]作为最少硬币数量。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

[ubuntu]OpenFOAM国内源码满速下载地址

下列地址可直接使用git clone&#xff0c;例如&#xff0c;打开终端&#xff0c;在终端直接将下面的复制进去&#xff1a; git clone https://e.coding.net/dyfluid/ThirdParty-6/ThirdParty-6.git即可在本地创建ThirdParty-6文件夹。如果提示你没有git&#xff0c;那么输入下面…

linux安装mysql

一、Mysql概述 MySQL 是一个开放源码的小型关联式数据库管理系统&#xff0c;开发者为瑞典 MySQL AB 公司。目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;许多中小型网站为了降…

看一下链表结构

序、慢慢来才是最快的方法。 背景 链表(Linked List) 链表是一种常见的基础数据结构&#xff0c;是一种线性表。与顺序表不同的是&#xff0c;链表中的每个节点不是顺序存储的&#xff0c;而是通过节点的指针域指向到下一个节点。 1.链表的优缺点 2.链表的类型 单链表、双链表…

有了PMP证书,还用考CSPM吗?

首先结论放前面&#xff08;看个人发展要求&#xff0c;如果想有双证加持的话&#xff0c;建议可以把握这个机会去申请&#xff0c;因为现在处于政策前期&#xff0c;可以免试申请&#xff0c;未来的政策未知。如果目前已经从事项目管理且拥有pmp证书的话&#xff0c;为了以后的…

将C盘中的文件夹迁移到其他盘符

目录 1 微信文件 2 移动系统自带文件夹 3 清除软件的缓存 1 微信文件 微信文件默认存储在C盘中&#xff0c;放任不管可能会占用很大的空间 更改后文件会自动挪过去&#xff0c;在C盘中只保留较小的空间 2 移动系统自带文件夹 像文档&#xff0c;图片这种文件夹&#…

TOGAF(企业架构)

TOGAF 核心概念&#xff08;官方原版&#xff09; 什么是TOGAF&#xff1f; TOGAF?是一种经验证的企业架构方法和框架&#xff0c;被世界领先的组织用于提高业务效率。它是一个企业架构标准&#xff0c;确保企业架构专业人员之间的标准、方法和通信一致&#xff0c;以便我们…

【vim 学习系列文章 7-- vim vnormap nnoremap nmap map inoremap 区别】

文章目录 1.1 vim 递归映射和非递归映射1.1.1 vim 可视模式 1.2 map nmap vnormap nnoremap inoremap 区别 1.1 vim 递归映射和非递归映射 递归映射和非递归映射是 Vim 中两种不同的键盘映射方式。 递归映射&#xff08;recursive map&#xff09;是指在定义键盘映射时&#x…

解读提示工程(Prompt Engineering)

提示工程&#xff08;Prompt Engineering&#xff09;&#xff0c;也称为上下文提示&#xff0c;是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务&#xff0c;从回答问题到算术推理乃至各种应用领…

spring和springMVC的说明

Spring和Spring MVC都是Java应用程序开发中常用的框架&#xff0c;它们提供了一种结构化的方法来构建企业级Java应用程序。下面我将对它们进行详细的说明&#xff1a; Spring&#xff1a; 概述&#xff1a; Spring是一个综合的Java应用程序开发框架&#xff0c;旨在简化企业级…

1808_ChibiOS基本的架构介绍

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 简单看了一下ChibiOS的架构介绍&#xff0c;感觉这种OS以及组件非常适合快速构建一个应用。这里做一个简单的资料整理。。 1. 不同于其他的OS&#…

孙哥Netty视频笔记总结

视频在这儿&#xff1a;https://blog.csdn.net/weixin_43996338/article/details/133771464 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】 【更多面试资料请加微信号&#xff1a;suns45】 https://flowus.cn/share/f6cd2cbe-627a-43…

【Electron+Vue】Error: error:0308010C:digital envelope routines::unsupported

问题描述 使用 electron-builder 构建 vue 项目&#xff0c;运行 npm run electron:build &#xff0c;构建过程报错。 / Bundling main process...ERROR Failed to compile with 1 errors …

微信小程序 js中写一个px单位转rpx单位的函数

大家写东西自然还是会比较喜欢用rpx 但是 事实证明 在js中 还是px好用 因为很多单位交互的函数还是只返回px单位的 理论上将 750 rpx 是整个屏幕的宽度 那么 我们可以这样写一个函数 pxToRpx(px) {//获取整个屏幕的宽度单位 pxlet screenWidth wx.getSystemInfoSync().scree…

cobbler3使用总结

按照如下步骤进行安装配置&#xff0c;实现PXEBIOS安装Centos和Ubuntu&#xff0c;UEFIiPXE安装Windows2019 若想实现UEFIiPXE安装Centos和Ubuntu&#xff0c;可以参考附录《更全的ipxe/default.ipxe》配置default.ipxe即可 rocky91安装配置cobbler3.3.3 准备工作 rocky91的…

Linux 回顾总结

学习前提&#xff08;环境搭建&#xff09;&#xff1a;RHCSA Linux环境搭建-CSDN博客 目录 一、shell 二、文件 三、用户和组管理 四、权限 五、软件 六、网络 七、磁盘 一、shell Linux的操作界面常称为Shell&#xff0c;Shell是操作系统提供给用户使用的界面&#xf…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(6) 上一回讲到了drm_internal_framebuffer_create函数中的framebuffer_check函数。讲解了该函数的参数检查部分中的第二部分,本回对于该函数余下部分进行解析。 为了便于理解,再次贴出framebuffer_ch…

如何避免nodejs express应用中出现太多的http连接

现象 正常情况下&#xff0c;基于nodejs的http通信应用&#xff0c;在发送http.request时不管你是否使用agent和timeout/keepAlive&#xff0c;客户端和服务器之间的连接数不会太多。但下面情况下&#xff0c;在请求频繁时连接数可能会快速增长并且不会释放&#xff1a; 客户端…

mac jdk的环境变量路径,到底在哪里?

在mac 电脑中&#xff0c;直接执行 java -version 显示Jdk的版本为1.8 然后打印Java环境变量 在终端中执行 echo $JAVA_HOME 1、情况一&#xff1a;发现环境变量是空的 我草&#xff0c;没配置环境变量怎么能使用Java &#xff0c;和查看jdk版本 2、情况二&#xff1a;环…

土壤水分烘干法流程

土壤水分烘干法流程 叠小盒子装土 对折 得到一个正方形&#xff0c;裁掉多余的。然后将正方形按如下形式折 再次对折 然后再展开&#xff0c;对着折痕&#xff0c;竖立起盒子边缘 把上面的尖角翻下来 最后将多余的长条裁出一个盒子底部大小的小方块&#xff0c;放入盒子…

Ubuntu 22.04上安装Anaconda,及 conda 的基础使用

1. 安装软件依赖包&#xff1a; apt install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 2. 下载Anaconda安装包 使用 wget下载您从Anaconda网站复制的链接。您将把它输出到一个名为anaconda.sh的文…