322. 零钱兑换(动态规划)
Posted guoyu1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了322. 零钱兑换(动态规划)相关的知识,希望对你有一定的参考价值。
1、题目:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
示例 1:
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:
输入: coins = [2], amount = 3
输出: -1
2、思路:
求最有解,动态规划解决。
3、代码:
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]; } }
以上是关于322. 零钱兑换(动态规划)的主要内容,如果未能解决你的问题,请参考以下文章