zoukankan      html  css  js  c++  java
  • [LeetCode 322] 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.

    BackPack VI and Combination Sum IV:  Find all possible combinations that sum to a target value 

    Coin Change: Find the combination that sums to a target value and uses the fewest number of elements

    State: dp[i]: the fewest number of coins needed that sum to i

    Function: dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1), if i >= coins[j] && dp[i - coins[j]] < Integer.MAX_VALUE

    i >= coins[j]: only consider picking a coin if its value is not greater than the target value i;

    dp[i - coins[j]] < Integer.MAX_VALUE: if we did pick coins[j], then we must be able to find a combination that sums 

    to i - coins[j];

    Initialization: dp[0] = 0, dp[i] = Integer.MAX_VALUE, for i >= 1

    Answer: dp[amount] or -1

     1 public class Solution {
     2     public int coinChange(int[] coins, int amount) {
     3         if(amount <= 0){
     4             return 0;
     5         }
     6         if(coins == null || coins.length == 0){
     7             return -1;
     8         }
     9         int[] dp = new int[amount + 1];
    10         dp[0] = 0;
    11         for(int i = 1; i <= amount; i++){
    12             dp[i] = Integer.MAX_VALUE;
    13         }
    14         for(int i = 1; i <= amount; i++){
    15             for(int j = 0; j < coins.length; j++){
    16                 if(i >= coins[j] && dp[i - coins[j]] < Integer.MAX_VALUE){
    17                     dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
    18                 }
    19             }
    20         }
    21         if(dp[amount] < Integer.MAX_VALUE){
    22             return dp[amount];
    23         }
    24         return -1;
    25     }
    26 }

    Related Problems

    BackPack VI

    Combination Sum IV

  • 相关阅读:
    Kafka 集群搭建 (自用)
    Kafka 简单实验二(Python实现简单生产者消费者)
    Kafka 简单实验一(安装Kafka)
    Spark下载与入门(Spark自学二)
    Spark导论(Spark自学一)
    MongoDB分片集群新增分片(自用)
    Python 获取图片文件大小并转换为base64编码
    Python 获取图片格式及像素宽高信息
    MongoDB集群设置集合分片生效及查看集合分片情况
    商城购物车的实现设计思想
  • 原文地址:https://www.cnblogs.com/lz87/p/7006859.html
Copyright © 2011-2022 走看看