LeetCode 322. Coin Change

原题连接在这里:https://leetcode.com/problems/coin-change/html

题目:post

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

Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)spa

Example 2:
coins = [2], amount = 3
return -1.code

题解:htm

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

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

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

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

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.

相关文章
相关标签/搜索