Created
March 23, 2018 18:13
-
-
Save exhesham/06a9d62086fb7bb93da9bbebb384ae54 to your computer and use it in GitHub Desktop.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Dynamic programming solution: | |
1. Let dp[i] where i is between [0..amount+1] represents the minimum amount of coins needed for i. | |
2. dynamic programming solution gives: | |
for each coin in coins and foreach amount i: dp[i] = min(dp[i], dp[i - coins[j]] + 1); | |
*/ | |
int coinChange(vector<int>& coins, int amount) { | |
int Max = amount + 1; | |
vector<int> dp(amount + 1, Max); | |
dp[0] = 0; | |
for (int i = 1; i <= amount; i++) { | |
for (int j = 0; j < coins.size(); j++) { | |
if (coins[j] <= i) { | |
dp[i] = min(dp[i], dp[i - coins[j]] + 1); | |
} | |
} | |
} | |
return dp[amount] > amount ? -1 : dp[amount]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment