Skip to main content

[DP] Minimum number of coins need for a specific amount

 322. Coin Change - LeetCode

You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.

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

You may assume that you have an infinite number of each kind of coin.

Example 1:

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

Example 2:

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

Explanation:

We use dynamic programming for this problem: First, we try to resolve the smaller problem!

Suppose we have numbers type of coins = [1,2,5]
We need to get minimum coins for amount 2
        The smallest amount is 0 then we need 0 coin
        With amount 1 we need 1 coin
        With amount 2:
            For case: coin 1 < 2, mean coin 1 can be used, then 1 coin
                      We need to calculate the coins for remain amount
                            The reimain amount is 2-1 = 1 
                            No. of coin for amount 1 is 1
                       => for this case we need 2 coins.
            For case: coin 2 <= 2, mean coin 2 can be used, then we have 1 coin
                      We need to calculate the coins for remain amount
                            The reimain amount is 2 - 2 = 0
                            No. of coin for amount 0 is 0
                       => for this case we need 1 coins.
                       compare with the previouse case, 1<2 then the answer is 1
            For case 5: 5 > 2, cannot use
 Then we just continue until the amount we're looking for.


Solution:

public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount+1];
        Arrays.fill(dp, amount + 1);
        dp[0] = 0;
        Arrays.sort(coins);
        for (int a = 1; a <= amount; a++){
            for(int i = 0; i<coins.length; i++){
                if (coins[i] <= a){
                    int remain = a - coins[i];
                    int numOfCoin = 1 + dp[remain];
                    dp[a] = Math.min(dp[a], numOfCoin);
                }
            }
        }
        return dp[amount] > amount? -1: dp[amount];
    } 

Comments

Popular posts from this blog

Fast English Word Learning with Flashcard Generator

Introducing a tool that generates flashcards for preschoolers learning English. With just the words input, this tool creates visually appealing flashcards with buttons to hear the word and search related images using Bing. It's the perfect way to accelerate language learning for young children. Benefits: - Expand vocabulary quickly - Engage multiple senses for effective learning - Interactive and fun experience Try it: Flashcard Generator

How to Install SQL Server on MacOS with docker

 I'm writing a small tut for who need to install SQL Server on macOS using docker Step 1: Download the SQL Server Image sudo docker pull mcr.microsoft.com/mssql/server:2019-latest Step 2: Launch the SQL Server Image in Docker docker run -d --name example_sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pass.word-123' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest Step 3: Check the SQL Server Docker Container docker ps -a Step 4: Install SQL Server Command-Line Tool sudo npm install -g sql-cli Step 5: Connect to SQL Server  5.1 Using Command mssql -u sa -p Pass.word-123 5.2: Using VSCode to connect to sql server Using the extension SQL Server (mssql)