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.

相關文章
相關標籤/搜索