You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写最小无法凑出零钱算法的暴力破解解法?

无法凑出的最小零钱金额暴力破解实现

针对给定硬币数组求无法凑出的最小零钱金额的问题,暴力解法实现思路和代码如下:

核心思路

不需要对硬币做排序预处理,从最小的正整数1开始依次向上校验每个金额:

  • 若当前金额可以用给定的硬币组合凑出(每个硬币仅可使用一次),则继续校验下一个更大的金额
  • 第一个无法被凑出的金额就是最终的返回结果

实现代码

以下是JavaScript版本的实现,和你提供的贪心解法测试结果一致:

function nonConstructibleChangeBruteForce(coins) {
    let checkAmount = 1;
    // 循环校验每个金额
    while (true) {
        if (!canForm(checkAmount, coins)) return checkAmount;
        checkAmount++;
    }
}

// 辅助函数:递归判断目标金额是否可被凑出
function canForm(target, coins, index = 0) {
    if (target === 0) return true;
    if (target < 0 || index >= coins.length) return false;
    // 两种分支:使用当前位置硬币 / 不使用当前位置硬币
    return canForm(target - coins[index], coins, index + 1) || canForm(target, coins, index + 1);
}

// 测试用例,输出结果为20,和贪心解法结果一致
console.log(nonConstructibleChangeBruteForce([5, 7, 1, 1, 2, 3, 22]));

复杂度说明

暴力解法的时间复杂度很高,假设最小无法凑出的金额为k,硬币总数为n,递归回溯校验的时间复杂度为O(k*2^n),仅适合小数据量的验证场景,生产环境更推荐使用你原有的排序+贪心的O(nlogn)解法。

内容的提问来源于stack exchange,提问作者user17399782

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:45:03