当前位置:首页 > JavaScript

js实现凑数

2026-03-14 11:20:34JavaScript

凑数算法实现思路

凑数问题通常指从给定数组中选取若干元素,使其和等于或接近目标值。以下是几种常见实现方式:

递归回溯法

适用于小规模数据,通过深度优先搜索尝试所有可能的组合:

function findCombination(nums, target) {
  const result = [];

  function backtrack(start, path, sum) {
    if (sum === target) {
      result.push([...path]);
      return;
    }

    for (let i = start; i < nums.length; i++) {
      if (sum + nums[i] > target) continue;
      path.push(nums[i]);
      backtrack(i + 1, path, sum + nums[i]);
      path.pop();
    }
  }

  backtrack(0, [], 0);
  return result;
}

动态规划法

适用于较大数据量,记录可能达到的和值:

function subsetSum(nums, target) {
  const dp = Array(target + 1).fill(false);
  dp[0] = true;

  for (const num of nums) {
    for (let i = target; i >= num; i--) {
      dp[i] = dp[i] || dp[i - num];
    }
  }

  return dp[target];
}

近似算法

当需要快速找到近似解时,可采用贪心算法:

js实现凑数

function approximateSum(nums, target) {
  nums.sort((a, b) => b - a);
  let sum = 0;
  const result = [];

  for (const num of nums) {
    if (sum + num <= target) {
      sum += num;
      result.push(num);
    }
  }

  return { sum, combination: result };
}

优化建议

  1. 大数据集考虑使用记忆化递归
  2. 需要所有解时保留回溯过程中的路径
  3. 允许近似解时可设置误差范围
  4. 负数处理需要额外条件判断

实际应用示例

const numbers = [3, 9, 8, 4, 5, 7];
const target = 15;

console.log('精确解:', findCombination(numbers, target));
console.log('是否存在解:', subsetSum(numbers, target));
console.log('近似解:', approximateSum(numbers, target));

以上方法可根据具体需求选择使用,递归法适合获取所有解,动态规划适合判断解是否存在,贪心算法适合快速获取近似解。

标签: js
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…