我有一个练习:硬币找零理解为一个DP的解决方案
“您将得到不同的教派和金额的总量的硬币写一个函数来计算的最少数目的需要硬币以弥补这个数额,如果这些数额的金额不能由任何硬币组合来补偿,则返回-1。“
例1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)
而且我也用Google搜索这样一个解决方案:
public class Solution {
public int coinChange(int[] coins, int amount) {
int dp[] = new int[amount + 1];
final int INF = 0x7ffffffe;
for (int i = 1; i <= amount; i++) dp[i] = INF;
for (int i = 0; i <= amount; i++) {
for (int j = 0; j < coins.length; j++) {
if (i + coins[j] <= amount)
dp[i + coins[j]] = Math.min(dp[i + coins[j]], dp[i] + 1);
}
}
return dp[amount] == INF ? -1 : dp[amount];
}
}
我知道其对DP,不过,我很迷惑它一样,有什么dp[i + coins[j]]
的含义,为什么要加i
,为什么dp[i] + 1
,为什么要加1?
任何人都可以用简单的英语表达出路吗?
你有没有了解'dp'数组存储的内容?如果你明白这一点,算法非常简单。 –
您的导师希望您从头开始编写解决方案,而不是Google提供解决方案。这样你可能会学到一些东西。 – Raedwald
它让我感到这个问题得到了4票。 – Raedwald