322. 零钱兑换

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

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

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

那么dp11的前一个状态是什么呢,可以是dp10,可以是dp9

但是这里我们要考虑,之前的这个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]; 
    }
}
相关推荐
地平线开发者3 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥3 小时前
匿名函数 lambda + 高阶函数
java·python·算法
我叫袁小陌4 小时前
算法解题思路指南
算法
地平线开发者4 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶
yuanyuan2o24 小时前
模型预训练:Hugging Face Transformers 基础
算法·ai·语言模型·自然语言处理·nlp·深度优先
杨充4 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
妄想出头的工业炼药师5 小时前
GS slam mono
算法·开源
_日拱一卒5 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
用户987409238878 小时前
llamafactory 0.6.3 没有 llamafactory-cli
算法