首页 > 其他分享 >leetCode322.零钱兑换

leetCode322.零钱兑换

时间:2025-01-04 13:16:36浏览次数:6  
标签:硬币 int coins 零钱 amount 兑换 总金额 leetCode322 dp

题目:

给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。
计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。
你可以认为每种硬币的数量是无限的。

示例1:
输入:coins=[1,2,5],amount=11
输出:3
解释:11=5+5+1

思路:

动态规划

代码:

    public int coinChange(int[] coins, int amount) {
        if (coins == null || coins.length == 0) {
            return -1;
        }
        // dp[i]的值: 表示的凑成总金额为i所需的最少的硬币个数
        // 注意:这里的数组长度,用 amount+1 确保一定能凑够金额
        int[] dp = new int[amount + 1];
        // 全部填充最大值,后面会通过比较找出较少的硬币数量
        Arrays.fill(dp, amount + 1);
        dp[0] = 0;
        // i是要凑够的金额,注意:从1开始递推
        for (int i = 1; i <= amount; i++) {
            for (int j = 0; j < coins.length; j++) {
                // 如果硬币值没有超过所需金额
                if (i - coins[j] >= 0) {
                    // dp[i]有两种实现的方式,
                    // 一种是包含当前 coins[i], 剩余的钱就是 i-coins[i].要兑换的硬币数是 dp[i-coins[j]] + 1,这个+1其实就是多一个硬币
                    // coins[i] 。
                    // 另一种就是不包含,要兑换的硬币数是 dp[i]
                    dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
                }
            }
        }
        return dp[amount] == (amount + 1) ? -1 : dp[amount];
    }

标签:硬币,int,coins,零钱,amount,兑换,总金额,leetCode322,dp
From: https://www.cnblogs.com/expiator/p/18651777

相关文章

  • 基于广告观看的积分兑换系统实现与优化
    本文介绍了一种基于广告观看的积分兑换系统,其核心理念与用户通过观看广告内容获取积分,进而将积分兑换为现金的机制相似,类似于国内某知名短视频平台的广告收益模式。该系统旨在探索一种非传统收益获取途径,通过技术手段实现自动化、高效化的广告观看与积分累积过程。一、系统......
  • 数字组合转字母&删除二叉树节点&字符串相乘&打家劫舍ii&无序数组第k大 &无序数组前k大
    一、数字串转换为字符串1-26个数字分别代表26个字符(A-z)输入"12326〞就可以拆分为【1,2,3,2,6】、(12,3,2,6].[1,23,2,6]【1,23,26】、【12,3,26】等,将每种组合转成成对应字母输出,输出所有可能的结果返回所有可能的转换结果//将数字串转换成字母串//将数字串转换成字母......
  • 代码随想录算法训练营第三十八天|leetcode322. 零钱兑换、leetcode279.完全平方数、le
    1leetcode322.零钱兑换题目链接:322.零钱兑换-力扣(LeetCode)文章链接:代码随想录视频链接:动态规划之完全背包,装满背包最少的物品件数是多少?|LeetCode:322.零钱兑换哔哩哔哩bilibili思路:感觉跟之前的方法思路差不多,就是对dp初始化的时候,我开始弄错了,应该初始成无限大,对dp[......
  • 代码随想录算法训练营第三十八天|leetcode322. 零钱兑换、leetcode279.完全平方数、le
    1leetcode322.零钱兑换题目链接:322.零钱兑换-力扣(LeetCode)文章链接:代码随想录视频链接:动态规划之完全背包,装满背包最少的物品件数是多少?|LeetCode:322.零钱兑换_哔哩哔哩_bilibili思路:感觉跟之前的方法思路差不多,就是对dp初始化的时候,我开始弄错了,应该初始成无限大,对dp[0......
  • java项目--零钱通(OOP)
    参考上一篇,项目在主方法中运行的弊端,不易修改,也不能随用随调,结合面向对象的优势,因此有了以下代码的实现:分两个部分,一个类是完成零钱通的各个功能,另一个类用于调用该类的方法。代码如下(功能类展示):/*该类是完成零钱通的各个功能的类*/publicclassOOP{booleanloop......
  • 迅雷加速器最新会员兑换口令
    对于热爱游戏的玩家来说,网络延迟和卡顿无疑是游戏体验的致命伤。迅雷加速器以其专业和高效的服务,为全球游戏爱好者提供了解决方案。现在,新用户有机会免费领取迅雷加速器的VIP会员,享受长达7+30天的加速服务。以下是详细的领取攻略:领取7天免费会员领取7天免费会员的步骤非常简......
  • SSM网上蛋糕销售软件9h34h 积分兑换
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:会员,蛋糕分类,蛋糕信息开题报告内容一、研究背景与意义随着互联网技术的飞速发展,电子商务已成为现代商业的重要组成部分。蛋糕作为一种深受消费者......
  • leetcode 刷题day37动态规划Part06背包问题( 322. 零钱兑换、279.完全平方数、139.单词
    322.零钱兑换思路:每种硬币的数量是无限的,是典型的完全背包问题。但是题目要求等于目标值的最小硬币个数。所以这里需要对动规五部曲进行分析。动规五部曲:1、确定dp数组以及下标的含义dp[j]:凑足总额为j所需钱币的最少个数为dp[j]2、确定递推公式凑足总额为j-coins[i......
  • C#编程中的贪心策略:找零钱问题
    C#中的贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不保证总是能得到全局最优解,但它通常实现简单,且对于很多问题来说,其解是足够好的,或者可以证明贪心选择能导致全局最优解。下面是一个使......
  • 基于Node.js+vue商城积分兑换系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在电子商务蓬勃发展的今天,商城积分兑换系统作为增强用户粘性、促进用户复购的重要手段,越来越受到各大电商平台的重视。随着消费者购物行为的日益成熟和多样......