Leetcode 322 279 零钱兑换,完全平方数

1.题目描述

题目解答

这道题涉及到动态规划的完全背包,而不是0/1背包,这两者的区别就是完全背包可以将一个元素重复使用多次,而不是像01背包一样只能使用一次,同时,这道完全背包求的是达成目标的最小次数,0/1背包求得的是能获取到的最大的价值,这两者完全不同。

对于此题,我们可以设置一个一维数组,用于记录在每一个最大数量amount面前能凑成的最少硬币数量。最大数量amount即为数组的下标。

java 复制代码
class Solution {
    public int coinChange(int[] coins, int amount) {
        int dp[] =new int [amount+1];
        Arrays.fill(dp,Integer.MAX_VALUE-1);
        dp[0] = 0;
        for(int i=1;i<=amount;i++){
            for(int coin:coins){
                if(i>=coin){
                   dp[i] = Math.min(dp[i],dp[i-coin]+1); 
                }
            }
        }
        return dp[amount] > amount ? -1 : dp[amount];
    }
}

2.题目描述

题目解答

这道题和上一道题的大概思路都是如出一辙的,唯一不同的就是元素从硬币变成了平方数,我们只需要在内层循环一遍遍计算小于当前n的平方数就行。

java 复制代码
class Solution {
    public int numSquares(int n) {
        int[] dp =new int[n+1];
        Arrays.fill(dp,Integer.MAX_VALUE-9);
        dp[0]= 0;
        //每一步都在当前的节点去尝试
        for(int i=1;i<=n;i++){
            for(int j = 1;j*j<=i;j++){
                 dp[i]=Math.min(dp[i],dp[i-j*j]+1);   
            }
        }

        return dp[n];
    }
}
相关推荐
Jasmine_llq1 小时前
《P10263 [GESP202403 八级] 公倍数问题》
算法·数论·快速 io 优化·埃氏筛(倍数枚举)·线性遍历求和
kevin_kang1 小时前
第01章 VoiceAgent 的总体架构与完整流程
算法
Lintongzg1 小时前
KV-Cache 的显存账本:长上下文、并发与量化剪枝的取舍
算法·机器学习·剪枝
小孩玩什么2 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法
jsjzsl22 小时前
独立自由度框架下核聚变的本体论本质与商业化技术新路径
人工智能·python·算法
土司大王2 小时前
LeetCode hot100——51.N 皇后:Java 回溯模板、列与对角线剪枝、O(n!) 复杂度分析
java·leetcode·剪枝
金金计较.2 小时前
Go语言-2
开发语言·算法·golang
计算机编程-吉哥2 小时前
基于机器学习的城市交通拥堵分析与预测平台【计算机毕业设计选题·机器学习·随机森林算法】
hadoop·算法·随机森林·机器学习·课程设计·计算机毕业设计选题·大数据毕业设计选题推荐
zyeyeye3 小时前
C++入门:从HelloWorld到命名空间揭秘
c语言·开发语言·c++·算法