思路: dp[i]表示兑换面额i需要的最少硬币 遍历coins可以得到dp[i-coin]种兑换情况,得到最少的兑换情况
/**
* @param {number[]} coins
* @param {number} amount
* @return {number}
*/
var coinChange = function (coins, amount) {
let dp = new Array(amount + 1).fill(Infinity)
dp[0] = 0
for (let i = 1; i <= amount; i++) {//遍历背包
for (let coin of coins) {//遍历物品
if (i - coin >= 0) {
/dp[i-coin]当前面额减去硬币价值所需要最少硬币
//dp[i] 可由dp[i-coin]+1转换而来
dp[i] = Math.min(dp[i], dp[i - coin] + 1)
}
}
}
return dp[amount] === Infinity ? -1 : dp[amount]
};
coins = [1, 2, 5], amount = 11
console.log(coinChange(coins, amount))