/**
* @param {number[]} coins
* @param {number} amount
* @return {number}
*/
var coinChange = function (coins, amount) {
// 用无限大填充数组,0 没办法比较,放进去也不影响
let dp = new Array(amount + 1).fill(Infinity);
dp[0] = 0;
for (let i = 1; i <= amount; i++) {
// 把公式循环
for (let coin of coins) {
// 现在的值 vs 循环出来的值
if (i - coin >= 0) {
// 公式 :dp[i]=Math.min(dp[i],dp[i-coin]+1)
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
}
}
}
// Infinity 表示 dp 没有参与循环,所以是 -1
return dp[amount] === Infinity ? -1 : dp[amount];
}
如果直接 除以 (从 5 到 2 到 1 ),然后向下取余
(未完待续…)