LeetCode 322. 코인 변경

4078 단어 algorithmsjavascript

설명:



당신은 다른 교단의 동전과 총 금액 금액이 제공됩니다. 해당 금액을 구성하는 데 필요한 최소 동전 수를 계산하는 함수를 작성하십시오. 동전의 어떤 조합으로도 그 금액을 채울 수 없으면 -1을 반환합니다.

각 종류의 동전이 무한히 있다고 가정할 수 있습니다.

예 1:




Input: coins = [1,2,5], amount = 11
Output: 3
Explanation: 11 = 5 + 5 + 1


예 2:




Input: coins = [2], amount = 3
Output: -1


해결책:



n = 동전.길이
m = 양
시간 복잡도 : O(n*m)
공간 복잡도: O(m)

// Tabulation solution
// Create an array where array[i] = least number of coins to make i
var coinChange = function(coins, amount) {
    // Array to hold the number of coins needed to make each amount
    const dp = Array(amount+1).fill(Infinity);
    // To make 0 you would not use any coins
    dp[0] = 0;

    // Fill the array with number of coins to make each i amount
    for(let i = 1; i < dp.length; i++) {
        // Find coins that can make amount i
        for(let coin of coins) {
            // If a coin can make the current amount check if this coin
            // is used in the sequence that uses fewest number of coins 
            // to make this amount
            if(i-coin >= 0) dp[i] = Math.min(dp[i], dp[i-coin]+1);
        }
    }

    return dp[amount] === Infinity ? -1 : dp[amount];
};

좋은 웹페이지 즐겨찾기