凑零钱问题:
给定k种面值的硬币,分别是c1,c2, … , ck,每种硬币的数量无限,请问最少需要多少枚硬币可以凑出总金额total,如果凑不出将返回-1.
- 暴力递归
举例:当总金额是23,硬币面值为1,2,5
首先最简单的就是当总金额是0时,需要0枚硬币。当我们选择一枚1元硬币时,就等于总金额为22时的最小硬币数加1。
int leastCoinNum(std::vector<int>& coins, int n)
{
if (n == 0)
return 0;
if (n < 0)
return -1;
int res = INT_MAX;
for (auto coin : coins)
{
if (coin <= n)
{
int subcnt = leastCoinNum(coins