如何在JavaScript中打印M x N二进制矩阵的所有组合

时间:2016-03-12 21:20:16

标签: javascript matrix binary

我正在处理一个函数,该函数采用矩阵的维度并在给定这些维度的情况下遍历每个可能的二进制矩阵。我是以递归方式进行的,并计划稍后使用DP实现它以获得更好的性能。继承人我的尝试不起作用。警告fill功能是我认为的ES6功能。 JSFiddle here.

var printAllBinMatsAux = function(m, n, r, c, mat) {
    console.log(mat);
    if (r >= m) return;
    if (c === n - 1) {
        return printAllBinMatsAux(m, n, r + 1, 0, mat.slice());
    }

    printAllBinMatsAux(m, n, r, c + 1, mat.slice());
    mat[r][c] = 1;
    printAllBinMatsAux(m, n, r, c + 1, mat.slice());
}

var printAllBinMats = function(m, n) {
    var mat = [];
    for (var i = 0; i < m; i++) {
        var row = new Array(n).fill(0);
        mat.push(row);
    }
    printAllBinMatsAux(m, n, 0, 0, mat);
}

printAllBinMats(3, 4);

1 个答案:

答案 0 :(得分:0)

如果您的尺寸不会太大,那么我就是二元计数&#39;一个长度为m * n的1d数组。然后,您可以将其拆分为行。不确定性能,但它对我来说非常快3x4。 Codepen here

function matrices(m, n) {
  var mn = m*n,
      loopTo = Math.pow(2, mn);

  for (var i = 0; i < loopTo; i++) {
    var matrix = [];
    for (var j = 0; j < mn; j++) {
      matrix.push((i & (1 << j)) ? 1 : 0);
    }
    print(matrix, m, n);
  }
}

function print(matrix, m, n) {
  var output = '';
  // Split the single array into m rows
  for (var i = 0; i < m; i++) {
    output += matrix.slice(i * n, (i+1) * n).join(' ') + '\n';
  }
  out.innerText += output + '\n';
}