问题描述 :

-
状态的定义:F(amount) 用最少的硬币兑换成amount的金额
-
状态转移方程:
F(n) = min(F(n-coin[0]) + 1,... ,F(n-coin[n-1]) + 1, F(n-coin[n]) + 1)
import java.util.Arrays;
/**
* dp数组的含义:dp[amount] 代表用最少的硬币数量兑换成amount的金额
*/
class Solution {
private int n;
public int coinChange(int[] coins, int amount) {
this.n = coins.length;
int[] dp = new int[amount + 1];
//找到基本问题的解
Arrays.fill(dp,amount);//这里不能赋值成Integer.MAX_VALUE,因为会存在溢出问题
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < n; j++) {
if (i - coins[j] >= 0) {
dp[i] = Math.min(dp[i - coins[j]] + 1, dp[i]);
}
}
}
return dp[amount]==amount?-1:dp[amount];
}
}
413

被折叠的 条评论
为什么被折叠?



