博客
关于我
322. 零钱兑换
阅读量:521 次
发布时间:2019-03-07

本文共 1118 字,大约阅读时间需要 3 分钟。

重新优化后的内容如下:

硬币改变问题常用动态规划法解决,目标是找到组成给定金额所需的最少硬币数量。以下代码示例展示了该算法的实现思路。

public int coinChange(int[] coins, int amount) {    if (amount == 0)        return 0;    if (coins == null || coins.length == 0)        return -1;        int[] dp = new int[amount + 1];    for (int i = 1; i <= amount; i++) {        int min = Integer.MAX_VALUE;        for (int face : coins) {            if (face > i)                continue;            int value = dp[i - face];            if (value < 0 || value > min)                continue;            min = value;        }        if (min == Integer.MAX_VALUE)            dp[i] = -1;        else            dp[i] = min + 1;    }    return dp[amount];}
  • 初始化状态数组:创建一个名为dp的数组,其长度为目标金额加1。dp[i]表示组成金额i所需的最少硬币数。初始化时,dp[0]通常为0,因为不需要硬币可以组成0元。

  • 定义递推关系:对于每一个金额i(从1到amount),初始化一个min值为最大可能值(Integer.MAX_VALUE)。然后遍历每一个硬币的面值face

    • 如果面值face大于当前金额i,跳过。
    • 对于每个有效的面值face,获取组成金额i-face所需的硬币数量。若dp[i-face]值为负数或大于当前min值,则忽略这种情况。
    • 更新min为找到最小的硬币数量。
    • 如果遍历结束后min仍为最大可能值,说明无法组成金额i,设为-1。如果自然得到的最少硬币数是可行的,则设为min + 1
  • 返回结果:最终,dp[amount]中存储的值即为组成给定金额所需的最少硬币数量。若无法组成,该值为-1。

  • 此算法通过一次遍历所有可能金额,并对每个金额尝试每个硬币面值,时间复杂度为O(n*m),其中n为金额,m为硬币面值数量。

    转载地址:http://moznz.baihongyu.com/

    你可能感兴趣的文章
    Python Matplotlib 中如何用 plt.savefig 存储图片
    查看>>
    Python matplotlib 中更换画布背景颜色
    查看>>
    Python进阶03 模块
    查看>>
    python matplotlib简单使用
    查看>>
    Python mock Patch os.environ 和返回值
    查看>>
    Python mock 修补另一个函数调用的函数
    查看>>
    python mqtt 客户端实现
    查看>>
    Python Multiprocessing - 将类方法应用于对象列表
    查看>>
    Python multiprocessing.Queue 与 multiprocessing.manager().Queue()
    查看>>
    Python multiprocessing使用详解
    查看>>
    python mysql 基于 sqlalvhrmy_Python操作MySQL:pymysql和SQLAlchemy
    查看>>
    python mysql 布尔类型_python语言的基础学习:基本类型,函数,面向对象,模块,mysql数据库...
    查看>>
    Python NLP完整项目实战教程(1)
    查看>>
    Python NLP自然语言处理详解
    查看>>
    python nltk nltk_data 离线安装,chatterbot
    查看>>
    Redis 限流的 3 种方式,还有谁不会?
    查看>>
    Python这么慢,为啥大公司还在用?
    查看>>
    python note 06 编码方式
    查看>>
    python numba 转灰度图_使用NumPy、Numba的简单使用(二)
    查看>>
    Python Numpy 关于 linspace()函数 使用详解(全)
    查看>>