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

  • 相关阅读:
    centos7 做rails 执行rails server 报错
    centos 7 安装 rvm 超时
    centos7 打造基于python语言Selenium2自动化开发环境
    RubyMine8 安装
    linux 下安装 RZ SZ命令 以及使用
    centos 7.2 安装mysql 修改 初始密码
    win10系统配置FTP
    Windows环境安装MySQL8.0.11
    IntelliJ IDEA 2017 上传本地项目至码云
    IntelliJ IDEA 2017.3 搭建一个多模块的springboot项目(三)
  • 原文地址:https://www.cnblogs.com/lz87/p/7006859.html
Copyright © 2011-2022 走看看