题解
1.动态规划-自上而下
优化版 已经求解过的缓存起来
function coinChange(coins: number[], amount: number): number {let cache = {};const dp = (n) => {if (cache[n]) return cache[n];if (n == 0) return 0;if (n < 0) return -1;let res = Number.MAX_SAFE_INTEGER;for (let i = 0; i < coins.length; i++) {let sub = dp(n - coins[i]);if(sub === -1) continue;res = Math.min(res, sub + 1);}if (res === Number.MAX_SAFE_INTEGER) {cache[n] = -1;} else {cache[n] = res;}console.log(cache);return cache[n];}return dp(amount);}
1.动态规划-自下而上
function coinChange(coins: number[], amount: number): number {
let dp = new Array(amount + 1).fill(amount + 1);
dp[0] = 0;
for (let i = 1; i <= amount; i++) {
for (let j = 0; j < coins.length; j++) {
if (coins[j] <= i) {
dp[i] = Math.min(dp[i], dp[i - coins[j]]+1);
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
};
