有足够量的2分、5分、1分硬币,如果想凑齐一元钱,可以有多少种方法?
/**
* 有足够量的硬币, 如果想凑齐指定金额, 求共有多少种方法
*
* @param {Array<number>} coins 已有硬币种类
* @param {number} target 目标金额
* @param {number} collect 当前已有金额
* @returns 硬币组合数量
*/
function getKindNum(coins, target, collect = 0) {
if (coins.length === 0) {
return collect === target ? 1 : 0
}
const curCoin = coins[0]
const size = target / curCoin
let ans = 0
for (let i = 0; i <= size; i++) {
ans += getKindNum(coins.slice(1), target, collect + i * curCoin)
}
return ans
}
console.log(getKindNum([1, 2, 5], 100)) // 541