在javascript中生成集合的所有powerset

时间:2016-10-16 07:19:07

标签: javascript bit-manipulation

我无法使用下面的以下代码段获得正确的输出,无法解决问题:

function powerSet(arr) {
  var res = [];
  var len = arr.length;
  for (var i = 0; i < Math.pow(2, len); i++) {
    var aux = [];
    for (var j = 0; j < len; j++) {
      //console.log(j +':'+((1<<j) & j));
      if (((1<<j) & j) !== 0) {
        aux.push(arr[j]);
      }
    }
    res.concat(aux);
  }
  return res;
}

console.log(powerSet([1, 2])); // [[1], [2], [1, 2]]

1 个答案:

答案 0 :(得分:1)

您的代码存在两个问题:

  • 您应该检查i的二分之一而不是j,即i & 1 << j
  • 执行res.push(aux)而不是res.concat(aux)

&#13;
&#13;
function powerSet(arr) {
  var res = [];
  var len = arr.length;
  for (var i = 0; i < Math.pow(2, len); i++) {
    var aux = [];
    for (var j = 0; j < len; j++) {
      //console.log(j +':'+((1<<j) & j));
      if (i & (1 << j)) {
        aux.push(arr[j]);
      }
    }
    res.push(aux);
  }
  return res;
}

console.log(powerSet([1, 2])); // [[1], [2], [1, 2]]
&#13;
&#13;
&#13;