322. Coin Change

栏目: Java · 发布时间: 6年前

内容简介: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, retur

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:

Input: coins = [1, 2, 5], amount = 11
Output: 3 
Explanation: 11 = 5 + 5 + 1

Example 2:

Input: coins = [2], amount = 3
Output: -1

Note:

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

难度:medium

题目:给定不同面值的硬币和一总金额。写一个函数来计算你需要的最少的硬币数量来构成这个总金额。如果这笔钱不能用硬币的任何组合来构成,则返回-1。

思路:DP

total[i]表示这个金额最少需要多少硬币组成。

total[amount] = Math.min(total[amount - coins[i]] + 1) (total[amount - coins[i]] > 0)

(total[amount - coins[i]] = 0) 意味着不可达。

Runtime: 13 ms, faster than 97.29% of Java online submissions for Coin Change.

Memory Usage: 38 MB, less than 42.39% of Java online submissions for Coin Change.

class Solution {
    public int coinChange(int[] coins, int amount) {
        if (null == coins || coins.length < 1 || amount <= 0) {
            return 0;
        }
        int[] total = new int[amount + 1];
        Arrays.sort(coins);
        for (int i = 0; i < coins.length && coins[i] < total.length; i++) {
            total[coins[i]] = 1;
        }
        
        for (int i = coins[0]; i <= amount; i++) {
            if (total[i] > 0) {
                continue;
            }
            total[i] = amount + 1;
            for (int j = 0; j < coins.length && i - coins[j] >= 0; j++) {
                if (total[i - coins[j]] > 0) {
                    total[i] = Math.min(total[i - coins[j]] + 1, total[i]);
                }
            }
        }
        
        return total[amount] > amount || total[amount] <= 0 ? -1 : total[amount];
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

锦绣蓝图

锦绣蓝图

[美] 沃德科 (Christina Wodtke)、[美] 戈夫拉 (Austin Govella) / 蔡芳 / 人民邮电出版社 / 2009-11-01 / 59.00

Web 2.0和社会化大趋势下,你的网站发展喜人,但是问题也接踵而来:信息变得越来越庞杂无序,业务流程愈加复杂,搜索和导航越来越难,用户对使用体验的要求也越来越高……怎么办? 作者非常通俗易懂地讲述了如何规划易用的网站及其背后的信息架构原理。首先介绍了建立信息架构的八项基本原则,然后重点强调了组织系统和元数据在信息架构中的作用,并指出设计搜索和导航需要考虑的问题和方法,另外还补充了当今热门的......一起来看看 《锦绣蓝图》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具