Javascript 将列矩阵中的所有零移到末尾
我有下面的矩阵Javascript 将列矩阵中的所有零移到末尾,javascript,Javascript,我有下面的矩阵 var matrix = [ [2, 0, 0, 2], [4, 0, 0, 2], [2, 64, 32, 4], [1024, 1024, 64, 0] ]; 我想把第一行和第二行第二列和第三列的零移到末尾,但我不知道怎么做。以下是我的尝试: for(var i = 0; i < matrix.length; i++) { for(var j = 0; j < matrix.lengt
var matrix = [
[2, 0, 0, 2],
[4, 0, 0, 2],
[2, 64, 32, 4],
[1024, 1024, 64, 0]
];
我想把第一行和第二行第二列和第三列的零移到末尾,但我不知道怎么做。以下是我的尝试:
for(var i = 0; i < matrix.length; i++) {
for(var j = 0; j < matrix.length ;j++) {
//push zeroes to the end
if(matrix[j][i] === 0){
for(var k = j+1; k<2;k++){
matrix[j][i] = matrix[k][i]
}
matrix[3][i] = 0
}
}
}
非常感谢您的帮助给您:
功能移位(m){
常数长度=m.长度;
for(设i=0;i console.log(shift(matrix).map(a=>a.map(n=>String(n).padStart(5,“”)).join(“\n”))
要将每列上的零移位,您可以将矩阵移位,将每行移位并将其转回:
let zip=a=>a[0].map(((uu,i)=>a.map(b=>b[i]))
设shiftZeros=a=>a.filter(x=>x).concat(a.filter(x=>!x))
//
设矩阵=[
[2, 0, 0, 2],
[4, 0, 0, 2],
[2, 64, 32, 4],
[1024, 1024, 64, 0]
];
结果=zip(zip(矩阵).map(shiftZeros))
console.log(result.map(x=>x.join())
由于某些行是硬编码的,所以给出的方法有点不清楚,但它看起来确实像一个三重嵌套的循环。这将在不必要的O(n3)时间内运行
一种有效的方法是使用两个指针——一个指向每列下一个零的交换位置,另一个指向当前元素。完成列的遍历后,将交换指针后的所有内容归零。这在O(n2)时间内运行(我们访问矩阵中的每个元素一次)
const zerostocolend=matrix=>{
for(设col=0;colm.map(row=>row.map(e=>(“+e).padStart(4)”).join(“|”).join(“\n”);
console.log(打印(zerostocolend(矩阵))代码>我不明白这种转换是如何工作的。预期结果的第一行中没有零。你能解释一下操作这些的规则吗?我能知道“break”是做什么的吗?@user545871break
立即结束一个循环,但你的命名有点不清楚:row
是一个矩阵行,而col
是一个列索引。谢谢。这些名字对我来说似乎很好——你建议我使用colIdx
或其他东西来区分它们吗?在这一点上,这并不重要,但更有意义。
Returns: [[2, 0, 0, 2], [4, 0, 0, 2], [2, 64, 32, 4], [1024, 0, 0, 0]]
Expected: [[2, 64, 32, 2], [4, 1024, 64, 2], [2, 0, 0, 4], [1024, 0, 0, 0]]