# 矩阵置零 给定一个`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] ] ``` ## 题解 ```javascript /** * @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/ ```