322. 零钱兑换

2018-12-26  本文已影响0人  Jason_Shu

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

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

  1. dp方程法

代码:

/**
 * @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];

};

上一篇 下一篇

猜你喜欢

热点阅读