程式碼隨想錄演算法訓練營 | 322. 零錢兌換,279.完全平方數,139.單詞拆分

漪欢酒發表於2024-10-12

322. 零錢兌換
題目連結:322. 零錢兌換
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰零錢兌換
日期:2024-10-12

想法:完全揹包,注意初始化除dp[0]外都要置為Integer.MAX_VALUE,才能後面選出最小值,還有判斷dp[j - coins[i]] != Integer.MAX_VALUE,不成立的化代表除去coins[i]後,沒有符合的結果,直接跳過。
Java程式碼如下:

class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount + 1];
        for(int i = 0; i <= amount; i++) {
            dp[i] = Integer.MAX_VALUE;
        }
        dp[0] = 0;
        for(int i = 0; i < coins.length; i++) {
            for(int j = coins[i]; j <= amount; j++) {
                if(dp[j - coins[i]]  != Integer.MAX_VALUE) {
                    dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
                }
            }
        }
        return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];
    }
}

279.完全平方數
題目連結:279.完全平方數
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰完全平方數
日期:2024-10-12

想法:跟上一題差不多
Java程式碼如下:

class Solution {
    public int numSquares(int n) {
        int[] dp = new int[n + 1];
        for(int i = 0; i <= n; i++) {
            dp[i] = Integer.MAX_VALUE;
        }
        dp[0] = 0;
        for(int i = 0; i * i <= n; i++) {
            for(int j = i * i; j <= n; j++) {
                if(dp[j - i * i] != Integer.MAX_VALUE) {
                    dp[j] = Math.min(dp[j], dp[j - i * i] + 1);
                }
            }
        }
        return dp[n];
    }
}

總結:確認i範圍沒反應過來,i^2小於等於n就行了。

139.單詞拆分
題目連結:139.單詞拆分
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰單詞拆分
日期:2024-10-12

想法:本質是組合,先揹包後物品。
Java程式碼如下:

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        HashSet<String> set = new HashSet<>(wordDict);
        boolean[] valid = new boolean[s.length() + 1];
        valid[0] = true;

        for (int i = 1; i <= s.length(); i++) {
            for (int j = 0; j < i && !valid[i]; j++) {
                if (set.contains(s.substring(j, i)) && valid[j]) {
                    valid[i] = true;
                }
            }
        }

        return valid[s.length()];
    }
}

相關文章