[刷题] 凑硬币

有足够量的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

[刷题] 凑硬币

上一篇:TP5.0实现页面redis 优化


下一篇:Gitlab