一、问题
二、分析
背包问题。
构造一个初始全是最大值的一维数组dp,dp[i]
就代表兑换i元
所需要的最少硬币个数。
所以有:dp[i] = Math.min(dp[i], dp[i - j] + 1);
其中j表示当前要使用的硬币面值。
三、代码
/**
* @param {number[]} coins
* @param {number} amount
* @return {number}
*/
var coinChange = function(coins, amount) {
if(amount === 0) return 0;
const dp = new Array(amount + 1).fill(Infinity);
dp[0] = 0;
for(let i = 1; i <= amount ; i ++){
for(let j of coins){
if(i >= j){
dp[i] = Math.min(dp[i], dp[i - j] + 1);
}
}
}
return dp[amount] === Infinity ? -1 : dp[amount];
};