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

322. 零钱兑换(leetcode)

时间:2024-09-03 21:04:09浏览次数:4  
标签:min int MAX coins 322 零钱 amount leetcode

https://leetcode.cn/problems/coin-change/description/

代码上比较麻烦的dp题,由于求的是最少数量,因此求答案时需要初始化无穷大来计算

class Solution {
    public int coinChange(int[] coins, int amount) {
        // f[i][j]表示前i个数中选,体积等于amount的选择最少硬币的数量
        // 以第i个数选多少来划分子集
        // f[i][j] = min(f[i-1][j],f[i][j-coins[i]] + 1) 选的话数量需要+1
        // 初值:f[0][0]=0;凑出0不需要硬币,且为便于计算,将f置为无穷大,只有f[0][0]=0;
        // 给dp数组每个位置赋初值为INT_MAX是为了最后判断是否能填满amount,为了防止溢出,用的MAX_VALUE/2
        // 答案是f[n][amount]

        int n = coins.length;
        int[][] f = new int[15][amount+10];
        for(int i=0;i<n;i++)Arrays.fill(f[i],Integer.MAX_VALUE / 2);
        f[0][0]=0;
        for(int i=1;i<=n;i++)
            for(int j=0;j<=amount;j++)
            {
                if(j>=coins[i-1])f[i][j]=Math.min(f[i-1][j],f[i][j-coins[i-1]]+1);
                else f[i][j]=f[i-1][j];
            }
        // 判断是否是无解
        return f[n][amount] < Integer.MAX_VALUE / 2 ? f[n][amount] : -1;
    }
}

 

标签:min,int,MAX,coins,322,零钱,amount,leetcode
From: https://www.cnblogs.com/lxl-233/p/18395443

相关文章

  • 377. 组合总和 Ⅳ(leetcode)
    https://leetcode.cn/problems/combination-sum-iv/description/此篇题解解释了为什么不能直接用二维完全背包的方式做不过还是建议把这个题当成一个爬楼梯来做classSolution{public:intcombinationSum4(vector<int>&nums,inttarget){//f[i]表示若干数中......
  • 518. 零钱兑换 II(leetcode)
    https://leetcode.cn/problems/coin-change-ii/description/可以直接考虑用完全背包的传统二维做法classSolution{publicintchange(intamount,int[]coins){//题意就是一个完全背包问题//f[i][j]表示前i个数中选,体积等于j的最大选法种数,答案就......
  • LeetCode_0028. 找出字符串第一个匹配项的下标,KMP算法的实现
    题目描述  给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹......
  • 洛谷 P3225 矿场搭建
    洛谷P3225矿场搭建题意煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。请......
  • 代码随想录算法训练营|Day01 LeetCode 704.二分查找,27.移除元素,977.有序数组的平方
    数组理论基础数组是存放在连续空间上的相同类型数据的集合数组的元素是不能删的,只能覆盖704.二分查找LeetCode:704.有序数组的平方classSolution{public:intsearch(vector<int>&nums,inttarget){intlength=nums.size();inti=0......
  • Java LeetCode练习
        LeetCodeExercise        807.保持城市天际线    题解:贪心        从左侧和右侧看,城市天际线等于矩阵grid的每一行的建筑物高度最大值;从顶部和底部看,城市天际线等于矩阵grid的每一列的建筑物高度最大值。只要不改变每一行和每一列......
  • 1049. 最后一块石头的重量 II(leetcode)
    https://leetcode.cn/problems/last-stone-weight-ii/description/思路较为巧妙的dp题,关键点在于如何将问题转化为01背包,有点贪心的思想主要是划分为两堆尽可能相等的石碓,然后判断能否凑出这个偏小的石碓(若干石头中选,能否选出这个价值)这里根据f[i]的定义可以有两种做法,1.f......
  • Leetcode——1.合并有序数组
    给你两个按非递减顺序排列的整数数组nums1_和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2_到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初......
  • 每日一题:Leetcode-224 基本计算器
    力扣题目解题思路java代码力扣题目:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。示例1:输入:s="1+1"输出:2示例2:输入:s="2-1+2"输出:3示例3:输入:s......
  • 【LeetCode】两数之和
    题目:在数组中找到2个数之和等于给定值的数字,结果返回2个数字在数组中的下标。要求时间复杂度为 O(n)。解题分析:作者:halfrost链接:https://leetcode.cn/leetbook/read/leetcode-cookbook/5lu4og/顺序扫描数组,对每一个元素,在map中找能组合给定值的另一半数字,如果找......