递推公式搭配dp[j] = Math.min(dp[j - coins[i] + 1, dp[j])
class Solution {
public int coinChange(int[] coins, int amount) {
//定义dp数组dp[j]表示凑成金额j的最少硬币个数
//求最小的初值赋值成最大的
int max = Integer.MAX_VALUE;
int[] dp = new int[amount + 1];
//初始化
dp[0] = 0;
for(int j = 1; j <= amount; j++){
dp[j] = max;
}
for(int i = 0; i < coins.length; i++){
//j至少比coins[i]大
for(int j = coins[i]; j <= amount; j++){
//递推公式
//为了返回值能够正常返回 -1
if(dp[j - coins[i]] != max){
dp[j] = Math.min(dp[j - coins[i]] + 1, dp[j]);
}
}
}
return dp[amount]== max ? -1 : dp[amount];
}
}