代码随想录算法训练营第44天 | 977.有序数组的平方 、27. 移除元素

  1. 零钱兑换

如果求组合数就是外层for循环遍历物品,内层for遍历背包。
如果求排列数就是外层for遍历背包,内层for循环遍历物品。

这句话结合本题 大家要好好理解。
视频讲解:https://www.bilibili.com/video/BV14K411R7yv
https://programmercarl.com/0322.零钱兑换.html

/**
 * @param {number[]} coins
 * @param {number} amount
 * @return {number}
 */
var coinChange = function(coins, amount) {
    const dp = new Array(amount+1).fill(Infinity);
    dp[0] = 0;
    for (let i=0;i<coins.length;i++) {
        for (let j=coins[i];j<=amount;j++) {
            dp[j] = Math.min(dp[j], dp[j-coins[i]]+1);
        }
    }
    return dp[amount]===Infinity? -1:dp[amount];
};

279.完全平方数
本题 和 322. 零钱兑换 基本是一样的,大家先自己尝试做一做
视频讲解:https://www.bilibili.com/video/BV12P411T7Br
https://programmercarl.com/0279.完全平方数.html

/**
 * @param {number} n
 * @return {number}
 */
var numSquares = function(n) {
     const dp = new Array(n+1).fill(Infinity);
     dp[0] = 0;
     for (let i=0;i*i<=n;i++) {
        for (let j=i*i;j<=n;j++) {
            dp[j] = Math.min(dp[j-i*i]+1,dp[j]);
        }
     }
     return dp[n];
};

139.单词拆分
视频讲解:https://www.bilibili.com/video/BV1pd4y147Rh
https://programmercarl.com/0139.单词拆分.html

这题先复制题解,没时间了
/**
 * @param {string} s
 * @param {string[]} wordDict
 * @return {boolean}
 */
var wordBreak = function(s, wordDict) {
  let dp = Array(s.length + 1).fill(false);
    dp[0] = true;

    for(let i = 0; i <= s.length; i++){
        for(let j = 0; j < wordDict.length; j++) {
            if(i >= wordDict[j].length) {
                if(s.slice(i - wordDict[j].length, i) === wordDict[j] && dp[i - wordDict[j].length]) {
                    dp[i] = true
                }
            }
        }
    }

    return dp[s.length];
};

关于多重背包,你该了解这些!
https://programmercarl.com/背包问题理论基础多重背包.html

背包问题总结篇!
https://programmercarl.com/背包总结篇.html

posted @ 2024-06-21 00:01  YuanYF6  阅读(2)  评论(0编辑  收藏  举报