#leetcode codingexercise
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.
Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)
Example 2:
coins = [2], amount = 3
return -1.
Note:
You may assume that you have an infinite number of each kind of coin.
Solution:
If the range of sums that can be generated using the first k numbers in coins is from 0 to r, and the next number has value x, then either:
• x <= r+1 and it is possible to generate any sum from 0 to r+x using the first k+1 numbers, or
• x > r + 1 and it is not possible to generate the sum r + 1, since x and all the following numbers have greater values.
We keep adding x=r+1 and counting such additions until r meets or exceeds n.
public int CoinChange(List<int> coins, int amount) {
int lookup[amount+1] = {0};
for (int i=0; i<coins.length; i++)
{
for (int n=1; n<=amount; n++)
{
if (n > coins[i])
{
int countWithNewCoin = lookup[n-coins[i]] + 1;
if (countWithNewCoin < lookup[n] || lookup[n]==0)
lookup[n] = countWithNewCoin;
}
}
}
return lookup[amount];
}
Coins 1,3
amount 5
lookup 0 1 2 3 4 5
Coins[1] 1 2 3 4 5
Coins[2] 2 3
courtesy : internet posts prismo skills
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.
Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)
Example 2:
coins = [2], amount = 3
return -1.
Note:
You may assume that you have an infinite number of each kind of coin.
Solution:
If the range of sums that can be generated using the first k numbers in coins is from 0 to r, and the next number has value x, then either:
• x <= r+1 and it is possible to generate any sum from 0 to r+x using the first k+1 numbers, or
• x > r + 1 and it is not possible to generate the sum r + 1, since x and all the following numbers have greater values.
We keep adding x=r+1 and counting such additions until r meets or exceeds n.
public int CoinChange(List<int> coins, int amount) {
int lookup[amount+1] = {0};
for (int i=0; i<coins.length; i++)
{
for (int n=1; n<=amount; n++)
{
if (n > coins[i])
{
int countWithNewCoin = lookup[n-coins[i]] + 1;
if (countWithNewCoin < lookup[n] || lookup[n]==0)
lookup[n] = countWithNewCoin;
}
}
}
return lookup[amount];
}
Coins 1,3
amount 5
lookup 0 1 2 3 4 5
Coins[1] 1 2 3 4 5
Coins[2] 2 3
courtesy : internet posts prismo skills
No comments:
Post a Comment