美文网首页
2020-11-12--数据结构与算法-14(动态规划篇3)

2020-11-12--数据结构与算法-14(动态规划篇3)

作者: 冰菓_ | 来源:发表于2020-11-17 07:57 被阅读0次

凑零钱问题

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:
 * Date: 2020-11-11
 * Time: 22:16
 * 先看下题目:给你 k 种面值的硬币,面值分别为 c1, c2 ... ck,
 * 每种硬币的数量无限,再给一个总金额 amount,问你最少需要几枚
 * 硬币凑出这个金额,如果不可能凑出,算法返回 -1 。算法的函数签名如下:
 * <p>
 * <p>
 * coins 中是可选硬币面值,amount 是目标金额
 * int coinChange(int[] coins, int amount);
 * <p>
 * k = 3,面值分别为 1,2,5,总金额 amount = 11。那么最少需要 3 枚硬币凑出,即 11 = 5 + 5 + 1。
 */
public class MakeTheChange {
    //较好的说明
    //最后一个硬币是1的话,最少硬币数应该为【组成10的最少硬币数】+ 1枚(1块硬币)
    //最后一个硬币是2的话,最少硬币数应该为【组成9的最少硬币数】+ 1枚(2块硬币)
    //最后一个硬币是5的话,最少硬币数应该为【组成6的最少硬币数】+ 1枚(5块硬币)

    public static void main(String[] args) {
        System.out.println(coinChange(new int[]{1, 2, 5}, 11));
    }

    public static int coinChange(int[] coins, int amount) {
        //首先判断数组的容量和金额大小
        if (coins.length <= 0 || amount < 0) {
            return -1;
        }
        if (amount ==0){return 0;}
        //考虑建立一个数组存放每个状态的值,表示dp[i] 要取出金额为i 需要的金币的最小的数量
        int[] dp = new int[amount + 1];
        for (int i = 0; i < dp.length; i++) {
            dp[0] = 0;
            dp[i] = 99999;
            for (int coin : coins) {
                if (i >= coin) {
                    dp[i] = Math.min(dp[i - coin] + 1, dp[i]);
                }
            }
        }
        int result = dp[amount] == 99999 ? -1:dp[amount];
        return result;
    }
}

相关文章

  • 2020-11-12--数据结构与算法-14(动态规划篇3)

    凑零钱问题

  • 动态规划-js

    动态规划 参考:算法分析与设计-贪心&动归 漫画:什么是动态规划? 【数据结构与算法】 DP 动态规划 介绍 介绍...

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 一位算法工程师的自我修养

    数据结构与算法 基本算法思想动态规划贪心算法回溯算法分治算法枚举算法 算法基础 时间复杂度 空间复杂度 最大复杂度...

  • 算法与数据结构网址备忘

    kd-tree算法原理与开源代码实现 详解kd-tree 动态规划入门篇 动态规划进阶篇

  • 七、动态规划

    记录一下对动态规划的学习。在学习数据结构与算法的过程中,觉得比较难的一个算法思想就是动态规划了。它的应用实在是多,...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 算法草稿

    常用算法集合 字符处理算法数组与查找链表树算法思路 递归、动态规划、BFS/DFS、双指针、二分法搜索数据结构的...

  • Swift 算法实战:动态规划

    Swift 算法实战:动态规划 Swift 算法实战:动态规划

网友评论

      本文标题:2020-11-12--数据结构与算法-14(动态规划篇3)

      本文链接:https://www.haomeiwen.com/subject/jtgybktx.html