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.

  • 相关阅读:
    js禁止空格的输入
    js对cookie的读写操作
    js实现读秒
    formData的简单使用
    图形验证码笔记
    Redis安装
    ZooKeeper安装
    OpenJDK 编译-Linux环境
    Java环境变量-Linux环境
    ArchLinux+Win10双系统的Grub配置
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5349625.html
Copyright © 2011-2022 走看看