数据结构刷题(三十三):完全背包最小值情况。322. 零钱兑换、279. 完全平方数

题目一:

322. 零钱兑换https://leetcode.cn/problems/coin-change/

思路:完全背包问题,求解最小组合数。dp[j]:凑足总额为j所需钱币的最少个数为dp[j]。同时需要确保凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;

注意:本题代码使用先遍历物品(也就是硬币),再遍历背包(amount)

代码:

java 复制代码
class Solution {
    public int coinChange(int[] coins, int amount) {
        int n = coins.length;
        int[] dp = new int[amount + 1];
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[0] = 0;
        // 当j<coins[i]时:装不下,继承上一个dp[j]的值
        // 当j>=coins[i]时:可以装得下,可以选择装或者不装中价值小的(物品数小的)进行转移
           即:dp[j]=min(dp[j],dp[j-coins[i]+1])
        for (int i = 0; i < n; i++){
            for (int j = coins[i]; j <= amount; j++){
                 if (dp[j - coins[i]] != Integer.MAX_VALUE)
                    // 比较之前的dp[j]与新的也就是去掉当前coins[i]的dp[j-coins[i]]比较
                    // +1加的是当前的coins[i]
                     dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
            }
        }
        // 如果没有命中则直接返回-1
        return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];
    }
}

题目二:

279. 完全平方数https://leetcode.cn/problems/perfect-squares/

本题翻译:完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品?

思路:完全背包问题,思路类似零钱兑换。还是先遍历物品(数字),再遍历背包(正整数n)。

代码:

java 复制代码
class Solution {
    public int numSquares(int n) {
        int[] dp = new int[n + 1];
        // 全部初始化为最大值
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[0] = 0;
        // 遍历所有物品,必须保证≤,
        for (int i = 1; i * i <= n; i++) {
            // 后遍历背包n
            for (int j = i * i; j <= n; j++){
                dp[j] = Math.min(dp[j], dp[j - i * i] + 1);
            }
        }
        return dp[n];
    }
}
相关推荐
菜鸡中的奋斗鸡→挣扎鸡2 分钟前
滑动窗口 + 算法复习
数据结构·算法
axxy20001 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
Uu_05kkq2 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
1nullptr4 小时前
三次翻转实现数组元素的旋转
数据结构
TT哇4 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
A懿轩A5 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
1 9 J6 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
汝即来归6 小时前
选择排序和冒泡排序;MySQL架构
数据结构·算法·排序算法
aaasssdddd969 小时前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式
芳菲菲其弥章9 小时前
数据结构经典算法总复习(下卷)
数据结构·算法