2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版

1.题目描述

2.思路

这里面钱币的数量是无限的。

装满这个背包(总金额)要用多少容量(硬币数量)。

(1)确定dp数组的含义

(2)装满容量为j,最少的物品为dp[j],要求硬币数量dp[amount]

(3)dp[0]=0

(4)不管是排列还是组合,这道题都是要装满背包。

格式:

for(物品) for(背包)-》组合数

for(背包)for(物品)-》排列数

3.代码实现

java 复制代码
class Solution {
    public int coinChange(int[] coins, int amount) {
        int max = Integer.MAX_VALUE - 1;
        int[] dp = new int[amount + 1];

        for (int i = 1; i <= amount; i++) {
            dp[i] = max;
        }

        dp[0] = 0;

        for (int i = 1; i <= amount; i++) { // 遍历金额
            for (int j = 0; j < coins.length; j++) { // 遍历硬币
                if (coins[j] <= i && dp[i - coins[j]] != max) {
                    dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
                }
            }
        }

        return dp[amount] == max ? -1 : dp[amount];
    }
}
相关推荐
深思慎考13 分钟前
【新版】Elasticsearch 8.15.2 完整安装流程(Linux国内镜像提速版)
java·linux·c++·elasticsearch·jenkins·框架
今天头发还在吗34 分钟前
【Docker】在项目中如何实现Dockerfile 文件编写
java·docker·容器
1710orange37 分钟前
java设计模式:动态代理
java·开发语言·设计模式
lingchen190640 分钟前
b = [1 2 3;4 5 6;7 8 9]>> b(2,2)=[ ]??? Subscripted assignme
数据结构·算法
Mr_Xuhhh1 小时前
哈希扩展学习
学习·算法·哈希算法
sxtyjty1 小时前
ABC426G - Range Knapsack Query
c++·算法·分治
dog2501 小时前
时延抖动的物理本质
人工智能·算法·机器学习
Vect__1 小时前
二叉树实战笔记:结构、遍历、接口与 OJ 实战
数据结构·c++·算法
聪明的笨猪猪2 小时前
Java “并发工具类”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
hahaha60162 小时前
高层次综合基础-vivado hls第三章
算法·fpga开发