Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取2D数组中0和1的所有可能组合(n x n)_Javascript_Arrays_Combinations - Fatal编程技术网

Javascript 获取2D数组中0和1的所有可能组合(n x n)

Javascript 获取2D数组中0和1的所有可能组合(n x n),javascript,arrays,combinations,Javascript,Arrays,Combinations,我正在尝试生成一个方法,该方法返回一个数组,该数组由一个二维平方数组中JS中的0和1组成。基本上,这和这个问题是一样的: 但是在Javascript中,没有包,并为数组的大小添加一个参数。比如,2x2应该是: let arr = new Array(2).fill(0).map(() => new Array(2).fill(0)) combinations(arr, 2) { ... } returns : [ [ [0, 0], [0, 0

我正在尝试生成一个方法,该方法返回一个数组,该数组由一个二维平方数组中JS中的0和1组成。基本上,这和这个问题是一样的:

但是在Javascript中,没有包,并为数组的大小添加一个参数。比如,2x2应该是:

let arr = new Array(2).fill(0).map(() => new Array(2).fill(0))
combinations(arr, 2) { ... }

returns : 
[
    [ 
        [0, 0],
        [0, 0]
    ],
    [
        [0, 0],
        [0, 1]
    ],
    [...],
    [
        [1, 1],
        [1, 1]
    ]
]
我尝试过递归,但没有成功,任何帮助都将不胜感激

编辑:

我试图写一个递归函数来解决这个问题

目前,我有以下方法:

let arr = new Array(2).fill(0).map(() => new Array(2).fill(0))
const generateCombination = (arr, n) => {
    let ret = [];
    let tmp;
    for (let i = 0; i < n; i++) {
      for (let j = 0; j < n; j++) {
        ret.push(arr)
        arr[i][j] = 1;
        generateCombination(arr.slice(), n-1)
      }
    }
    return ret;
  };

有趣的是,参数n的不同组合可以表示为数字0到数字2n2-1的所有二进制序列

因为我们处理的是可能很大的数字,下面的实现使用新的数据类型来表示这些数字。它获取每个数字,将二进制字符串填充到固定长度,然后将字符串分块到二维数组中

性能可能并不惊人,但我认为这是一种有趣的方法

const组合=(n)=>{
常量位=n**2;
常数max=2n**BigInt(位);
常量结果=[];
对于(设i=0n;i(i%n)
A.
:[…a,array.slice(i,i+n)],[]);
}
返回结果;
}

控制台日志(组合(2))请去阅读。你应该经常向我们展示你的尝试(),即使那些尝试没有完全成功。我明白了。这确实是一个有趣的方法,你从一个不同于我的角度看待这个问题。我会尝试这个,也许会尝试调整它,使它更容易理解。非常感谢。看起来最复杂的部分是将数组分块的部分,这是根据一个问题改编的。我尝试过你的解决方案,但它在节点上崩溃了n=5。我想我需要寻找这个问题的递归解决方案,而不必像你那样通过bigint。理想情况下,我希望它一直运行到n=7或8,对于n=5,您看到的是33554432二维数组,因此您的进程可能内存不足。编写一个生成器函数可能更好。现在,我正在寻找一种方法,用两个循环递归地完成完全相同的事情,您将如何实现这一点?编辑:我已经更新了问题和我提供的样本
[
  [ [ 1, 1 ], [ 1, 1 ] ],
  [ [ 1, 1 ], [ 1, 1 ] ],
  [ [ 1, 1 ], [ 1, 1 ] ],
  [ [ 1, 1 ], [ 1, 1 ] ],
]