标签:style 个数 max 编写 for 返回 解释 new code
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
示例 1:
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:
输入: coins = [2], amount = 3
输出: -1
求最有解,动态规划解决。
class Solution { public int coinChange(int[] coins, int amount) { int n=amount; int [] faces=coins; if (n < -1 || faces == null || faces.length == 0) return -1; int[] dp = new int[n + 1]; for (int i = 1; i <= n; i++) { int min = Integer.MAX_VALUE; for (int face : faces) { if (i < face || dp[i - face] < 0) continue; if (i >= face) { min = Math.min(dp[i - face], min); } } if (min == Integer.MAX_VALUE) { dp[i] = -1; } else { dp[i] = min + 1; } } return dp[n]; } }
标签:style 个数 max 编写 for 返回 解释 new code
原文地址:https://www.cnblogs.com/guoyu1/p/13199512.html