leetcode地址:322. 零钱兑换
问题描述:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。比如coins = [1,2,5],amount = 11,11 = 5 + 5 + 1,最终结果为3
算法思路:
采用贪心算法:想要总硬币数最少,肯定是优先用大面值硬币,所以对 coins 按从大到小排序。先丢大硬币,再丢会超过总额时,就可以递归下一层丢的是稍小面值的硬币
void coinChange(vector<int>& coins, int amount, int c_index, int count, int& ans)
{
if (amount == 0)
{
ans = min(ans, count);
return;
}
if (c_index == coins.size()) return;
fo