给你随机数量硬币arr,再给你一个随机正整数x,请写出一个函数,算出最少多少枚硬币便可凑成那个正整数,如果能凑成那个数,请返回最少所需的硬币数量,如不能,返回-1
描述的有些不太清楚,示例就是 假如硬币为 【1、2、2、5、5、1】,随机数x为11,那么,最少只需要5、5、1这三个硬币便可得到11这个值,所以返回3
var arr = [1, 2, 2, 5, 1],//硬币数组
total = 12,//随机数x
n = 0;//题目最后需要返回的值
function coins(arr, total) {
var newArr = arr.sort((a, b) => b - a).filter(item => item < total);
for (let i = 0; i < newArr.length; i++) {
total -= arr[i];
n++;
if (total == 0) {
return n;
}
if (total < 0) {
total += newArr[i];
n--;
}
}
if (total != 0) return -1;
}
console.log(coins(arr, total));
我的解题思路:
先对硬币数组进行降序排序,再筛选掉那些比随机数x大的元素(这个貌似不难理解吧,,,假如提供的随机数x是4,硬币数组里有5这个值,不管怎么说,5也不可能凑成4吧)
为什么要进行降序排序,很简单啊
这是求最少数量凑成随机数x,那么,我用这个随机数x减去筛选后的硬币数组里最大的值,(因为已经筛选过了,所以剩下的值不管怎么说都不可能超过x,最多相等)
然后就是循环遍历的事了