Javascript 获取2D数组中0和1的所有可能组合(n x n)
我正在尝试生成一个方法,该方法返回一个数组,该数组由一个二维平方数组中JS中的0和1组成。基本上,这和这个问题是一样的: 但是在Javascript中,没有包,并为数组的大小添加一个参数。比如,2x2应该是: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
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 ] ],
]