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

322.零钱兑换

时间:2023-06-03 16:34:01浏览次数:57  
标签:初始化 硬币 int coins 322 零钱 amount 兑换 dp

其中,dp[i][j]表示使用前i个硬币可以凑出总价值为j的钱数的最小硬币数,初始化时将dp[0][i]的值设为无穷大,因为凑出总价值为0的钱数不需要任何硬币。在状态转移方程中,如果j < coins[i - 1],则不能选当前硬币,此时dp[i][j] = dp[i - 1][j];否则,可以选当前硬币,dp[i][j] = dp[i][j - coins[i - 1]] + 1。最后,如果dp[coins.length][amount]的值为无穷大,则无法凑出总价值为amount的钱数,否则返回dp[coins.length][amount]的值。

注意:当对dp[0][*]这一行数据进行初始化时候,应该初始化为一个较大的数,但是不能用Integer.MAX_VALUE,否则后续对Integer.MAX_VALUE进行加操作时候,溢出为很小的负数。因此在此处选取amount+1进行初始化。(amount+1一定大于最终的硬币数量)

class Solution {
    public int coinChange(int[] coins, int amount) {
        int[][] dp = new int[coins.length + 1][amount + 1];
        for (int i = 1; i <= amount; i++) {
            dp[0][i] = amount+1;
        }
        for (int i = 1; i <= coins.length; i++) {
            for (int j = 1; j <= amount; j++) {
                if (j < coins[i - 1]) {
                    dp[i][j] = dp[i - 1][j];
                } else {
                    dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - coins[i - 1]] + 1);
                }
            }
        }
        return dp[coins.length][amount] == amount+1 ? -1 : dp[coins.length][amount];
    }
}

参考:
作者:flix
链接:https://leetcode.cn/problems/coin-change/solutions/1412324/by-flix-su7s/

标签:初始化,硬币,int,coins,322,零钱,amount,兑换,dp
From: https://www.cnblogs.com/chenyi502/p/17454158.html

相关文章

  • 20180315~20180322每天复习
    MPUSH架构图: 系统调用关系图: mpush目前支持如下消息类型 publicenumCommand{HEARTBEAT(1),//心跳HANDSHAKE(2),//握手LOGIN(3),LOGOUT(4),BIND(5),//绑定用户UNBIND(6),//解绑用户......
  • 322. 零钱兑换
    给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。输入:coins=[1,2,5],amount=11输出:3解释:11=5+......
  • 518.零钱兑换II
    给你一个整数数组coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回0。假设每一种面额的硬币有无限个。题目数据保证结果符合32位带符号整数。输入:amount=5,coins=[1,2,......
  • 警钟长鸣-----找零钱
    蒟蒻的我在这个题上花了40分钟还超时了(悲不说了先上超时的代码:1#include<bits/stdc++.h>2usingnamespacestd;3intres,n,a[]={1,2,5,10,20,50,100},x;4voiddfs(intst,intnum,intid)5{6if(st==0){res++;return;}7if(st<0||num>100||id>6)r......
  • 322. Coin Change刷题笔记
    用自底向上的dp算法classSolution:defcoinChange(self,coins:List[int],amount:int)->int:dp=[0]+[float('inf')]*amountforiinrange(1,amount+1):forcoinincoins:ifi-coin>=0:......
  • 02.凑零钱问题
    先看下题目:给你k种面值的硬币,面值分别为c1,c2...ck,每种硬币的数量无限,再给一个总金额amount,问你最少需要几枚硬币凑出这个金额,如果不可能凑出,算法返回-1。算法的函数签名如下://coins中是可选硬币面值,amount是目标金额intcoinChange(int[]coins,intamount);1、......
  • 连续签到积分兑换试用流量主小程序开发
    每日签到积分兑换试用流量主小程序开发打卡兑奖小程序。用户签到活得积分。积分可以兑换商品。观看激励视频广告可以积分翻倍。用户可以参加试用商品活动参加试用需要提交信息。可以通过分享方式直接获取试用资格。以下是流量主小程序的功能列表:1.广告位管理:可以创建、编辑和删除......
  • day45| 70+322+279
    70.爬楼梯 题目简述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路:1.要想爬到第n阶,必须先上第n-1阶或者n-2阶2.利用动态规划,定义初始条件dp[0]=1,dp[1]=23.有dp[i]=dp[i-1]+dp[i-2],其中i......
  • ASEMI代理ADUM3223ARZ-RL7原装ADI车规级ADUM3223ARZ-RL7
    编辑:llASEMI代理ADUM3223ARZ-RL7原装ADI车规级ADUM3223ARZ-RL7型号:ADUM3223ARZ-RL7品牌:ADI/亚德诺封装:SOIC-16批号:2023+安装类型:表面贴装型引脚数量:16工作温度:-40°C~125°C类型:车规级芯片ADUM3223ARZ-RL7特征4A峰值输出电流工作电压相对于输入的高侧或低侧:537V峰......
  • 7-010-(LeetCode- 322) 零钱兑换
    1.题目读题 考查点 2.解法思路 代码逻辑 具体实现113.总结......