美文网首页
322. 零钱兑换

322. 零钱兑换

作者: Jason_Shu | 来源:发表于2018-12-26 20:06 被阅读0次

    题目链接:https://leetcode-cn.com/problems/coin-change/

    思路:这个题目可以转换为「爬楼梯」的模式。

    1. dp方程法
    • dp[i]:表示凑齐总金额为i所用的最少零钱数
    • dp转移方程式:dp[i] = min(dp[i-1], dp[i-2], dp[i-5]) + 1 (注:此题coins=[1, 2, 5])
    • 初始化: dp[0] = 0;

    代码:

    /**
     * @param {number[]} coins
     * @param {number} amount
     * @return {number}
     */
    var coinChange = function(coins, amount) {
        // 初始化一个长度为amount+1长度的数组,并且把每个元素设为足够大的数。
        let dp = new Array(amount + 1).fill(Number.MAX_SAFE_INTEGER)
        // dp初始化
        dp[0] = 0;
    
        for(let i = 1; i <= amount; i++) {
            for(let j = 0; j < coins.length; j++) {
                if(coins[j] <= i) {
                    //   取类似「思路」中「min(dp[i-1], dp[i-2], dp[i-5]) + 1」的结果
                    dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1)
                }
            }
        }
        //  最后如果dp[i]中元素相对初始化没有变的话,则表明没有凑成总额为i的组合
        return dp[amount] === Number.MAX_SAFE_INTEGER ? -1 : dp[amount];
    
    };
    
    

    相关文章

      网友评论

          本文标题:322. 零钱兑换

          本文链接:https://www.haomeiwen.com/subject/oorklqtx.html