程式碼隨想錄演算法訓練營第44天 | 977.有序陣列的平方 、27. 移除元素

YuanYF6發表於2024-06-21
  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

相關文章