当前位置: 首页 > 后端技术 > Java

Leetcode322.硬币找零兑换(中)

时间:2023-04-01 19:16:09 Java

1.题目标签:动态规划https://leetcode.cn/problems/coin-change给你一个整数数组硬币,代表不同面额的硬币;和一个整数amount,表示总金额。计算并返回构成总量所需的最小硬币数。如果没有硬币组合构成总数,则返回-1。您可以认为每个硬币的数量是无限的。示例1:输入:coins=[1,2,5],amount=11输出:3解释:11=5+5+1示例2:输入:coins=[2],amount=3输出:-1示例3:Input:coins=[1],amount=0Output:0Tips:1<=coins.length<=121<=coins[i]<=231-10<=amount<=104Coins可以无限次使用,所以这是一个完全的背包问题。dp[i]表示达到总量i所需的最少硬币数,因为需要最少硬币数,所以先将dp初始化为amount+2,状态转移方程为:dp[i]=min(dp[i],dp[i-coin]+1)3.解题方法3.1Java实现publicclassSolution{publicintcoinChange(int[]coins,intamount){if(coins.length==0){return-1;}int[]dp=newint[数量+1];Arrays.fill(dp,数量+2);dp[0]=0;for(inti=1;i<=amount;i++){for(intcoin:coins){if(i>=coin){dp[i]=Math.min(dp[i],dp[i-硬币]+1);}}}返回dp[数量]==数量+2?-1:dp[数量];}}4.总结笔记2022/7/1周五,今天是一个连接过去和未来的日子