中山祥云网站建设,网站信息员队伍建设方案,常用的网页开发技术有哪些,网站发布时间更改题目
给你一个整数数组 coins #xff0c;表示不同面额的硬币#xff1b;以及一个整数 amount #xff0c;表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额#xff0c;返回 -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提示
1 coins.length 121 coins[i] 2^31 - 10 amount 10^4 解答
源代码
public class Solution {public int coinChange(int[] coins, int amount) {int max amount 1;int[] dp new int[amount 1];Arrays.fill(dp, max);dp[0] 0;for (int i 1; i amount; i) {for (int j 0; j coins.length; j) {if (coins[j] i) {dp[i] Math.min(dp[i], dp[i - coins[j]] 1);}}}return dp[amount] amount ? -1 : dp[amount];}
}
总结
知道了要dp也总是不知道该怎么dp哎……
dp[i]表示金额 i 需要的最少硬币数这时寻找硬币中比 i 小的硬币 i 减去这个硬币的金额数对应金额数的dp再加上1就等于dp[i]比较出最小的dp[i]。