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

  • 相关阅读:
    关闭windows10更新
    ude5.00修改字体大小方法
    hightec的eclipse运行错误解决
    Tek DPO2024B示波器和电流探头A622的使用
    vue项目中使用mockjs+axios模拟后台数据返回
    vue-tree 组织架构图/树形图自动生成(含添加、删除、修改)
    vue html页面打印功能vue-print
    项目中遇到的bug、问题总结
    在Vue项目中使用html2canvas生成页面截图并上传
    element-ui 使用span-method表格合并后hover样式的处理
  • 原文地址:https://www.cnblogs.com/lz87/p/7006859.html
Copyright © 2011-2022 走看看