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

  • 相关阅读:
    Linux 性能优化之 IO 子系统
    Percona 开始尝试基于Ceph做上层感知的分布式 MySQL 集群,使用 Ceph 提供的快照,备份和 HA 功能来解决分布式数据库的底层存储问题
    Ceph常用维护操作
    linux系统数据落盘之细节
    Ceph: validate that the RBD cache is active
    linux初始化
    GlusterFS 安装
    GlusterFS常用设置命令
    kubernetes --- Glusterfs
    kubernetes --- weave
  • 原文地址:https://www.cnblogs.com/lz87/p/7006859.html
Copyright © 2011-2022 走看看