多维数组.一种求解算法

Multidimensional Arrays. An algorithm for solving

本文关键字:一种 算法 数组      更新时间:2023-09-26

下午好!

我需要实现以下算法。如果矩阵的元素M x N=0,那么行和列的所有元素都要赋值0。

这是我的解决方案:

var arr = [[1, 2, 3, 4],
           [5, 0, 7, 8],
           [8, 9, 10, 11]];
var vertical, horizontal;
for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr[i].length; j++) {
        if (arr[i][j] == 0) {
            vertical = j;
            horizontal = i;
        }
    }
}
for (var k = 0; k < arr.length; k++) {
    if (k == horizontal) {
        for (var l = 0; l < arr[k].length; l++) {
            arr[k][l] = 0;
        }
    }
}
for (var a = 0; a < arr.length; a++) {
    for (var b = 0; b < arr[a].length; b++) {
        if (b == vertical) {
            arr[a][b] = 0;
        }
    }
}
for (var c in arr) {
    document.write(arr[c] + '<br />');
}

在我看来这不是很合理。如何简化代码?

我会将for循环更改为Array.prototype.forEach()

  1. 首先查找值为0的所有单元格,并存储项引用。

  2. 遍历项目列表,并将所有列和行的值更改为零。

var arr = [[1, 2, 3, 4], [5, 6, 0, 8], [8, 9, 10, 11]],
    p = [];
arr.forEach(function (a, i) {
    a.forEach(function (b, j) {
        if (b === 0) {
            p.push({ x: i, y: j });
        }
    });
});
p.forEach(function (a) {
    arr[a.x] = arr[a.x].map(function () { return 0; });
    arr.forEach(function (b) { b[a.y] = 0; });
});
document.write('<pre>items: ' + JSON.stringify(p, 0, 4) + '</pre>');
document.write('<pre>arr: ' + JSON.stringify(arr, 0, 4) + '</pre>');

相关文章: