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;
}
};