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

  • 相关阅读:
    判断回车键自动提交
    WCF开发使用证书文件配置基于自定义X509证书
    递归算法
    Web网站开发常用正则表达式
    WINDSOW2003 IIS配置后无法显示 ASP网页的问题
    如何写好软件开发需求文档
    Bitmap Drawable Canvas Paint比较
    Android开发:LayoutParams的用法
    华为投身互联网:吹了冲锋号 就要往前冲
    android 获取手机号问题
  • 原文地址:https://www.cnblogs.com/lz87/p/7006859.html
Copyright © 2011-2022 走看看