给定一个m x n
的矩阵,如果一个元素为0
,则将其所在行和列的所有元素都设为0
。请使用原地算法。
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var setZeroes = function(matrix) {
var row = new Set();
var column = new Set();
matrix.forEach( (line, i) => {
line.forEach( (v, k) => {
if(v === 0) {
row.add(i);
column.add(k);
}
})
} )
matrix.forEach( (line, i) => {
line.forEach( (v, k) => {
if( row.has(i) || column.has(k) ) matrix[i][k] = 0;
})
} )
};
使用了比较简单的解法,首先设置两个Set
用以记录需要置0
的行号和列号,然后遍历矩阵,如果遍历到矩阵的值为0
,那么就将该值的行号与列号分别记录到两个Set
中,然后再次遍历整个矩阵,如果该值的行号或者列号在Set
中,那么就将矩阵中的这个值置为0
,遍历完成之后就实现了原地置0
。
https://github.com/WindrunnerMax/EveryDay
https://leetcode-cn.com/problems/set-matrix-zeroes/