• 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.

  • 相关阅读:
    前端带队之漫谈
    css3之currentColor
    安装及升级node
    谈JavaScript代码封装
    再玩儿一次——深入理解闭包
    【学习笔记】ES6标准入门
    【学习笔记】移动Web手册(PPK力作)
    使用webstorm操作git
    使用webstorm调试node程序
    前端代理nproxy
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5349625.html
Copyright © 2020-2023  润新知