leetcode322 零钱兑换

112 阅读1分钟

322. 零钱兑换 - 力扣(LeetCode)

思路: 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))