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

JavaScript 遍历定序数字数组按规则生成所有两两组合的实现方案

原代码问题说明

原代码仅处理了数组最外层左右指针的配对逻辑,没有循环处理中间剩余的子数组,只能输出前两轮的结果,无法覆盖所有符合要求的组合。

实现思路
  • 采用双指针法从数组两端向中间遍历,每次循环先收集左指针对应元素和其右侧到右指针所有元素的配对,再收集右指针对应元素和其左侧到左指针+1所有元素的配对
  • 左右指针各向中间移动一位,重复上述操作直到左指针大于等于右指针,即可覆盖所有符合要求的组合,且顺序完全匹配示例
正确实现代码
function calculate(numbers) {
  const combinations = [];
  let l = 0;
  let r = numbers.length - 1;
  while (l < r) {
    // 收集左指针和右侧所有元素的配对
    for (let j = l + 1; j <= r; j++) {
      combinations.push(`${numbers[l]} ${numbers[j]}`);
    }
    // 收集右指针和左侧(排除左指针)所有元素的配对
    for (let j = r - 1; j > l; j--) {
      combinations.push(`${numbers[r]} ${numbers[j]}`);
    }
    l++;
    r--;
  }
  return combinations;
}

注:如果数组元素是数字类型,01会被JS自动转义为十进制1,如果需要保留前导零建议使用字符串类型存储数组元素。

测试验证

测试用例1(长度为5的数组)

const numbers1 = ['01','02','03','04','05'];
console.log(calculate(numbers1));
/* 输出:
[
  '01 02', '01 03', '01 04', '01 05',
  '05 04', '05 03', '05 02', '04 03',
  '04 02', '03 02'
]
*/

测试用例2(长度为6的数组)

const numbers2 = ['00','00','00','10','40','60'];
console.log(calculate(numbers2));
/* 输出:
[
  '00 00', '00 00', '00 10', '00 40',
  '00 60', '60 40', '60 10', '60 00',
  '60 00', '00 00', '00 10', '00 40',
  '40 10', '40 00', '00 10'
]
*/

内容的提问来源于stack exchange,提问作者Alexis San Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:54:04