322. 零钱兑换

这道题是典型的背包问题,我习惯使用dp问题的解答思路来实现

想要直到目前钱数最少的组合次数,就要直到前一个额度的最少组合次数

比如说现在的钱数有2,5,要组合的钱数是11

那么dp[11]的前一个状态是什么呢,可以是dp[10],可以是dp[9]

但是这里我们要考虑,之前的这个dp值可能是不存在的,也就是可能前面有一个值是凑不出来的,所以我们需要有一个if判断

java 复制代码
class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount+1];
        Arrays.fill(dp,Integer.MAX_VALUE);
        dp[0] = 0;
        for(int coin : coins){
            for(int j = coin ; j <= amount; j++) {
                if(dp[j-coin] != Integer.MAX_VALUE) dp[j] = Math.min(dp[j], dp[j-coin]+1);
            }
        }
        return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount]; 
    }
}
相关推荐
头发够用的程序员1 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
淡海水2 小时前
【AI模型】模型量化技术详解
人工智能·算法·机器学习
炸膛坦客2 小时前
嵌入式 - 数据结构与算法:(1-1)数据结构 - 顺序表(Sequential List)
数据结构·算法·嵌入式
水龙吟啸2 小时前
数据结构与算法随机复习–Day1
数据结构·c++·算法
生成论实验室2 小时前
《事件关系阴阳博弈动力学:识势应势之道》第八篇:认知与反思关系——探索、定位与延续
人工智能·算法·架构·知识图谱·创业创新
YaraMemo3 小时前
一文带你区分全局最优解和帕累托最优解
算法·5g·信息与通信·信号处理
白夜11173 小时前
C++(标签派发 Tag Dispatching)
开发语言·c++·笔记·算法
YaraMemo3 小时前
数学优化问题中的三大转化:多目标转化为单目标,多变量转化为单变量,有约束转化为无约束
人工智能·算法·5g·信息与通信·信号处理
Ailan_Anjuxi3 小时前
【附Python源码】使用minGPT训练自己的小型GPT语言模型
算法