Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
對(duì)于一個(gè)矩陣相味,如果一個(gè)元素是0秋秤,則將其所在行嗡靡,列都置為0智政;
思路1
使用兩個(gè)數(shù)組來記錄哪個(gè)行和哪個(gè)列需要被置為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
使用每行和每列的第一個(gè)元素標(biāo)記本行或本列是否需要被置為0翰守,由于第一行和第一列的這個(gè)元素是重復(fù)的贼陶,所以單用一個(gè)變量來記錄第一列的情況。
記錄完后從最后一個(gè)元素開始往前更新整個(gè)矩陣
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;
}
};