具有 n 个元素的数组的子集 javascript

问题描述 投票:0回答:3

我正在尝试编写一个函数,它将接受一个数组和 n 作为参数,

它将返回包含 n 个元素的数组的所有子集,已经尝试了一些方法,但尚未成功。

感谢把它放在这里的人,这个函数太复杂了,不能完成工作,基本上我在这里尝试做的是从 4 元素数组中挑选一个元素来创建它的 3 元素子集。它甚至不采用 N 作为参数。它返回所有 3 个元素子集,但也返回相同的子集,所以我也必须将它们过滤掉,无论如何我都会继续尝试。

function findSubsets(array) { 
    var answers = []; 
    var firstArray = array; 
    for (i = 0; i < array.length; i++) { 
       array = firstArray; 
       for (var k = 0; k < array.length; k++) { 
          if (k != i) { 
              var subset = array.splice(k, 1); 
              answers.push(array); array.splice(k, 0, subset[0]);
          } 
       }
    } 
}
javascript arrays
3个回答
2
投票

这并不像看起来那么复杂。这个是经过优化的,因为它在此过程中不会创建无用的临时数组。

function findSubsets(array, n) { 
    var answers = []; 
    for(var i = 0 ; i < array.length ; i += n) {
        answers.push(array.slice(i, i + n));
    }
    return answers;
}

findSubsets([1, 2, 3, 4, 5, 6, 7, 8, 9], 2) // --> [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
findSubsets([1, 2, 3, 4, 5, 6, 7, 8, 9], 3) // --> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

1
投票

您可以尝试这个解决方案

var subsetArray = (function() {
  return {
    getResult: getResult
  }

  function getResult(array, n) {

    function isBigEnough(value) {
      return value.length === n;
    }

    var ps = [
      []
    ];
    for (var i = 0; i < array.length; i++) {
      for (var j = 0, len = ps.length; j < len; j++) {
        ps.push(ps[j].concat(array[i]));
      }
    }
    return ps.filter(isBigEnough);
  }
})();

var arr = [1, 2, 3, 4,5,6,7,8,9]; console.log(subsetArray.getResult(arr,2));


0
投票

问题陈述:
对于给定的一维数字数组,找到所有可能的子集 具有特定长度的数组,例如

对于数组 [1,2,3] 如果我们想找到长度为 2 的所有子集那么

输出应该是

[
  [1,2],
  [1,3],
  [2,3]
]

解决方案:

function getAllSubsetsOfSpecificLength(array, length) {
  const subsets = [[]];
  const subsetsOfSpecificLength = [];

  for (const el of array) {
    const last = subsets.length - 1;
    for (let i = 0; i <= last; i++) {
      let set = [...subsets[i], el];
      subsets.push(set);

      if (set.length == length) {
        subsetsOfSpecificLength.push(set);
      }

      if (set.length > length) {
        break;
      }
    }
  }

  return subsetsOfSpecificLength;
}
let array = [1, 2, 3];
let result = getAllSubsetsOfSpecificLength(array, 2);
console.log(result);

输出:

[ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ] ]
© www.soinside.com 2019 - 2024. All rights reserved.