トピック:
異なる金種と合計金額のコインが与えられます。合計金額を構成するために必要なコインの最小数を計算する関数を記述します。コインの組み合わせで合計金額を構成できない場合は、-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];
};