博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Coin Change
阅读量:6476 次
发布时间:2019-06-23

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

Coin Change

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

Example 1:

coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)

Example 2:

coins = [2], amount = 3
return -1.

Note:

You may assume that you have an infinite number of each kind of coin.

分析

典型的DP问题。注意这里的硬币是可以无限使用的,另外注意下无法兑换返回-1的处理。

很多人首先想到的是Greedy,即总是取最大的硬币,不够再取小的,这种方法得到的结果是不能保证最小硬币数量的, 比如输入是[1, 3, 5, 6], 8, Greedy得到结果是3(6 + 1 + 1),而正确结果是2(3 + 5)

这道题要求是返回硬币个数,显然Follow up可以是在最少硬币的情况下,返回具体的硬币值

我能想到的比较直接的方法就是用一个map对于每个可以组合的amount用一个List存对应的硬币组合,然后同样是DP的方法找到最小硬币组合,更新组合。

复杂度

time: O(n*m), space: O(n), n表示amount,m表示硬币个数。

代码

public class Solution {    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 j = 0; j < coins.length; j++) {                if (i >= coins[j] && dp[i - coins[j]] != -1)                    min = Math.min(min, dp[i - coins[j]] + 1);            }                        // 根据min的值判断是否能兑换            dp[i] = min == Integer.MAX_VALUE ? -1 : min;        }        return dp[amount];    }}

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

你可能感兴趣的文章
db 文件 查看 打开 工具 db 中文 版 navicat 中文
查看>>
为Textbox控件注册回车事件及回车事件中触发按钮提交事件
查看>>
第二次作业
查看>>
防范计算机木马入侵反恶意联盟落户滨海
查看>>
艾伟:.NET框架4.0中都有些什么?
查看>>
艾伟也谈项目管理,软件公司的两种管理方式
查看>>
JS生成不重复的随机数
查看>>
(八)整合spring cloud云服务架构 - commonservice-eureka 项目构建过程
查看>>
python 解析与生成xml
查看>>
leetcode(三)
查看>>
【Android的从零单排开发日记】——Android数据存储(下)
查看>>
博客第一篇:博客申请理由
查看>>
Configure,Makefile.am, Makefile.in, Makefile文件之间关系
查看>>
[DP]JZOJ 1758 过河
查看>>
javascript类型系统之基本数据类型
查看>>
Python 基础二:运算符和编码
查看>>
WorkFlow设计篇Step.3—异常处理-WF4.0
查看>>
健身--自我修行
查看>>
webForm练习1(地区导航)
查看>>
EXCEL基础内容学习笔记(一)基本环境和保存关闭
查看>>