(Js)Leetcode322。交換の変更

トピック:

異なる金種と合計金額のコインが与えられます。合計金額を構成するために必要なコインの最小数を計算する関数を記述します。コインの組み合わせで合計金額を構成できない場合は、-1を返します。

各コインの数は無制限と考えることができます。

例1:

入力:コイン= [1、2、5]、金額= 11
出力:3 
説明:11 = 5 + 5 + 1
例2:

入力:コイン= [2]、金額= 3
出力:-1
例3:

入力:コイン= [1]、金額= 0
出力:0
例4:

入力:コイン= [1]、金額= 1
出力:1
例5:

入力:コイン= [1]、金額= 2
出力:2

促す:

1 <= coins.length <= 12
1 <= coins [i] <= 231-1
0 <=量<= 104

アイデア:

動的計画法

コード:

/**
 * @param {number[]} coins
 * @param {number} amount
 * @return {number}
 */
var coinChange = function(coins, amount) {
    // 数组大小为 amount + 1
    let dp = new Array( amount + 1 ).fill( Infinity );
    dp[0] = 0;
    // 外层 for 循环在遍历所有状态的所有取值
    for (let i = 1; i <= amount; i++) {
        // 内层 for 循环在求所有选择的最小值
        for (let coin of coins) {
            if (i - coin >= 0) {
                dp[i] = Math.min(dp[i], dp[i - coin] + 1);
            }
        }
    }
  
    return dp[amount] === Infinity ? -1 : dp[amount];

};

演算結果:

おすすめ

転載: blog.csdn.net/M_Eve/article/details/113532362