描述
给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1
.
你可以假设每种硬币均有无数个
您在真实的面试中是否遇到过这个题? 是
样例
给出 coins = [1, 2, 5]
, amount = 11
返回 3
(11 = 5 + 5 + 1)
给出 coins = [2]
, amount = 3
返回 -1
#include <iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N =100;
const int INF = 2147483640;
int a[N];
int n;
typedef long long int LL;
int beibao(int amount) {//这个函数为求数额为amount的时候所需要的最小硬币数
if (amount == 0)
return 0;//如果数额为零就不需要硬币
if (amount < 0) {
return INF;//如果数额为负数,代表拼不出数 ,就设为正无穷
}
int pre = beibao(amount - a[1]) + 1;
for (int i = 2; i <= n; i++) { //比较各种方案
pre = min(pre, beibao(amount - a[i])+1);
}
return pre;
}
int main()
{
int amount;
cin >> n;//不同面值货币的数量
cin >> amount;//要拼出的数额值
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
cout << beibao(amount) << endl;
return 0;
}