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

如何查找数组中元素和等于指定数值的所有长度的有效组合

实现方案

你当前的两层循环只能处理固定长度为2的组合,要支持任意长度的符合要求的组合查询,使用回溯算法即可实现。

代码实现
function solution(arr, target) {
  const result = []
  // 回溯参数:当前累计和、当前选中的元素组合、下一次选元素的起始索引
  const backtrack = (currentSum, currentComb, startIndex) => {
    // 累计和匹配目标值,存入结果
    if (currentSum === target) {
      result.push([...currentComb])
    }
    // 剪枝:累计和已超过目标值,无需继续添加元素
    if (currentSum > target) {
      return
    }
    // 从起始索引开始遍历,避免生成顺序不同的重复组合
    for (let i = startIndex; i < arr.length; i++) {
      currentComb.push(arr[i])
      backtrack(currentSum + arr[i], currentComb, i + 1)
      // 回溯撤销当前选择
      currentComb.pop()
    }
  }
  backtrack(0, [], 0)
  return result
}
逻辑说明
  • 每次选择元素都从当前索引的下一位开始,不会出现如[2,3]和[3,2]这类顺序不同的重复组合
  • 匹配到目标和时对当前组合做浅拷贝再存入结果,避免后续回溯操作修改已存入的结果
  • 匹配到目标和时不直接终止递归,保证加0后和仍为目标值的组合(如[2,3]和[2,3,0])可以被正常收录
测试效果

输入示例arr = [2,4,1,3,0,1]、target = 5时,输出结果为:
[[2,3],[2,3,0],[4,1],[4,1,0],[1,3,1],[1,3,1,0]]
你给出的示例中遗漏了[1,3,1],该组合元素和为1+3+1=5,属于合法符合要求的组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:39:03