声明:只求用最简单的方法通过,不求优化,不喜勿喷
- dp求解,用dp记录当前金额需要的最小的钱币数量,初始为-1(不可兑换)
- 先初始dp数组,dp[0]作为0元的数据,表示0元需要0张钱币
- 每个金额遍历所有面值,如果当前金额-面值对应那位不是-1(可以取到),那么需要的钱币数量为dp[当前金额-面值]+1,找出所有可能的方案,取最小的那位作为该金额的dp数组的值
- 最后输出dp[目标金额]即可
- 优化todo
感觉是最近做过最简单的一档dp了,dp真的好难
/**
* @param {number[]} coins
* @param {number} amount
* @return {number}
*/
var coinChange = function (coins, amount) {
let dp = new Array(amount + 1).fill(-1);
dp[0] = 0;
for (var i = 1; i <= amount; i++) {
let sum = 9999999;
for (var j = 0; j < coins.length; j++) {
if (i - coins[j] >= 0 && dp[i - coins[j]]>=0) {
if ((dp[i - coins[j]] + 1) < sum) {
sum = dp[i - coins[j]] + 1;
}
}
}
if (sum !== 9999999)
dp[i] = sum;
}
return dp[amount]
};