73. Set Matrix Zeroes

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
对于一个矩阵,如果一个元素是0,则将其所在行,列都置为0;

思路1

使用两个数组来记录哪个行和哪个列需要被置为0;

var setZeroes = function(matrix) {
    var row = matrix.length;
    var col = matrix[0].length;
    var r = [];
    var c = [];
    for (var i = 0;i < row;i++) {
        for (var j = 0;j < col;j++) {
            if (matrix[i][j]===0) {
                r[i]=1;
                c[j]=1;
            }
        }
    }
    for (i = 0;i < row;i++) {
        if (r[i]!==1)
            continue; 
        for (j = 0;j < col;j++) {
            matrix[i][j]=0;
        }
    }
    for (i = 0;i < col;i++) {
        if (c[i]!==1)
            continue; 
        for (j = 0;j < row;j++) {
            matrix[j][i]=0;
        }
    }
};

思路2

使用每行和每列的第一个元素标记本行或本列是否需要被置为0,由于第一行和第一列的这个元素是重复的,所以单用一个变量来记录第一列的情况。
记录完后从最后一个元素开始往前更新整个矩阵

var setZeroes = function(matrix) {
    var col0 = 1, rows = matrix.length, cols = matrix[0].length;
    for (var i = 0; i < rows; i++) {
        if (matrix[i][0] === 0) col0 = 0;
        for (var j = 1; j < cols; j++)
            if (matrix[i][j] === 0)
                matrix[i][0] = matrix[0][j] = 0;
    }
    for (var i = rows - 1; i >= 0; i--) {
        for (var j = cols - 1; j >= 1; j--)
            if (matrix[i][0] === 0 || matrix[0][j] === 0)
                matrix[i][j] = 0;
        if (col0 === 0) matrix[i][0] = 0;
    }
};

你可能感兴趣的:(73. Set Matrix Zeroes)