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.
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.
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> amounts(amount + 1, numeric_limits<int>::max());
amounts[0] = 0;
for (int i = 0; i <= amount; ++i) {
if (amounts[i] != numeric_limits<int>::max()) {
for (const auto& coin : coins) {
if (i + coin <= amount) {
amounts[i + coin] = min(amounts[i + coin], amounts[i] + 1);
}
}
}
}
return amounts[amount] == numeric_limits<int>::max() ? -1 : amounts[amount];
}
};
本文介绍了一种解决硬币找零问题的高效算法。该算法通过动态规划的方法计算出组成特定金额所需的最少硬币数量。文章提供了具体的代码实现,并通过两个示例展示了算法的应用场景。
1218

被折叠的 条评论
为什么被折叠?



