博客
关于我
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/

    你可能感兴趣的文章
    Pytest:一个卓有成效的测试工具
    查看>>
    python
    查看>>
    Python "HTTP Error 403: Forbidden"
    查看>>
    python %ns的作用
    查看>>
    Python + Appium 之 APP 自动化测试,坑点汇总!(建议收藏)
    查看>>
    Python + Appium 自动化操作微信入门(超详细)
    查看>>
    Python + Pytest 自动化框架的用例依赖实操
    查看>>
    python进阶(8):yield函数
    查看>>
    Python + requests实现接口自动化测试!
    查看>>
    python + requests实现的接口自动化测试(超详细~)
    查看>>
    Python + selenium 如何截图?
    查看>>
    Python + Selenium 登录QQ邮箱
    查看>>
    Python + selenium如何做接口自动化测试?
    查看>>
    Python + selenium如何截图!
    查看>>
    Python + selenium自动化生成测试报告!
    查看>>
    Python - C 嵌入式分段错误
    查看>>
    Python - DM 一个用户 Discord 机器人
    查看>>
    python - Flask 基础 - 蓝图( Blueprint )(2)
    查看>>
    python - os.getenv 和 os.environ 看不到我的 bash shell 的环境变量
    查看>>
    Python - while循环
    查看>>