322. Coin Change

Question

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.


Code

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

Solution

动态规划。

用dp存储硬币数量,dp[i] 表示凑齐钱数 i 需要的最少硬币数,那么凑齐钱数 amount 最少硬币数为:固定钱数为 coins[j] 一枚硬币,另外的钱数为 amount - coins[j] 它的数量为dp[amount - coins[j]],j 从0遍历到coins.length - 1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • You are given coins of different denominations and a tota...
    Shiyi001阅读 280评论 0 0
  • You are given coins of different denominations and a tota...
    Jeanz阅读 468评论 0 0
  • 问题描述 You are given coins of different denominations and a...
    codingXue阅读 346评论 0 0
  • 鸡米花,就是那个去肯德基点完一份不知不觉中被消灭的好吃的。今天呢,教大家一招,怎样快速做好吃经济实惠健康安全的鸡米...
    蘑菇公举阅读 939评论 25 24
  • 生命里,总有一些人 不停相遇,不断告别, 青春也匆匆而过,路过了 爱情,烙下了回忆; 也曾许下过,永恒的 诺言,可...
    一叶扁舟_8d1c阅读 209评论 0 2