zoukankan      html  css  js  c++  java
  • LeetCode 322. Coin Change

    原题链接在这里:https://leetcode.com/problems/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.

    题解:

    要求满足amount时用的最少coins数目.

    Let dp[i] denotes amount == i 时用的最少coins数目. 用一维array储存.

    递推时,状态转移dp[i] = Math.min(dp[i], dp[i-coins[j]]+1).  dp[i-coins[j]]+1表示用最少个数coin表示i-coins[j].

    初始化dp[0] = 0. amount为0时不需要硬币. dp其他值都是Integer的最大值, 之后会每次更新取最小值.

    Time Complexity: O(amount * coins.length).

    Space: O(amount).

    AC Java:

    class Solution {
        public int coinChange(int[] coins, int amount) {
            if(amount == 0){
                return 0;
            }
            
            if(coins == null || coins.length == 0){
                return -1;
            }
            
            int [] dp = new int[amount+1];
            dp[0] = 0;
            for(int i = 1; i<=amount; i++){
                dp[i] = Integer.MAX_VALUE;
                for(int coin : coins){
                    if(i-coin<0 || dp[i-coin]==Integer.MAX_VALUE){
                        continue;
                    }else{
                        dp[i] = Math.min(dp[i], dp[i-coin]+1);
                    }
                }
            }
            
            return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];
        }
    }

    类似Minimum Cost For Tickets.

  • 相关阅读:
    js38---门面模式
    js37---Function.prototype
    js36---函数嵌套
    js35
    js34
    js33--责任链模式
    js32---CommonUtil.js
    龙芯服务器参数
    SQLSERVER 秘钥整理
    IOMETER的简单使用
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5349625.html
Copyright © 2011-2022 走看看