JAVA练习88-零钱兑换

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、题目-零钱兑换

1.题目描述

2.思路与代码

2.1 思路

2.2 代码

总结


前言

提示:这里可以添加本文要记录的大概内容:

3月24日练习内容


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目-零钱兑换

1.题目描述

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/coin-change
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.思路与代码

2.1 思路

1.创建一个到达硬币数量数组

2.遍历数组,将数组的每个值设为MAX_VALUE

3.遍历硬币数组,如果硬币数组当前值小于 i,则使用地推公式更新dp[i]的值dp[i] = Math.min(dp[i], dp[i - coin]) + 1

4.判断最后一个元素是否为MAX_VALUE,如果是则输出-1,不是则输出数组值

2.2 代码

代码如下(示例):

class Solution {
    public int coinChange(int[] coins, int amount) {
        
        //到达每个值相对应的硬币数矩阵
        int[] dp = new int[amount + 1];

        for(int i = 1;i < dp.length;i ++){
            //临时值,并将dp[i] 设置为MAX_VALUE-1
            int temp = Integer.MAX_VALUE - 1;
            for(int coin : coins){
                if(coin <= i){
                    temp = Math.min(temp,dp[i - coin]);
                }
            }
            dp[i] = temp + 1;
       }

        return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];
    }
}


总结

提示:这里对文章进行总结:
 

你可能感兴趣的:(java练习,数据结构,leetcode,java)