73. Set Matrix Zeroes
Description
Given an m x n
integer matrix matrix
, if an element is 0
, set its entire row and column to 0
's.
You must do it in place.
Example 1:

Input: matrix = [[1,1,1],[1,0,1],[1,1,1]] Output: [[1,0,1],[0,0,0],[1,0,1]]
Example 2:

Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] Output: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]
Constraints:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
Follow up:
- A straightforward solution using
O(mn)
space is probably a bad idea. - A simple improvement uses
O(m + n)
space, but still not the best solution. - Could you devise a constant space solution?
Solutions
Solution: Hash Map
- Time complexity: O(mn)
- Space complexity: O(1)
JavaScript
js
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
const setZeroes = function (matrix) {
const m = matrix.length;
const n = matrix[0].length;
const isFirstRowZero = matrix[0].includes(0);
const isFirstColZero = matrix.some(row => row[0] === 0);
for (let row = 1; row < m; row++) {
for (let col = 1; col < n; col++) {
if (matrix[row][col]) continue;
matrix[row][0] = 0;
matrix[0][col] = 0;
}
}
for (let row = 1; row < m; row++) {
for (let col = 1; col < n; col++) {
if (matrix[row][0] === 0 || matrix[0][col] === 0) {
matrix[row][col] = 0;
}
}
}
if (isFirstRowZero) {
for (let col = 0; col < n; col++) {
matrix[0][col] = 0;
}
}
if (isFirstColZero) {
for (let row = 0; row < m; row++) {
matrix[row][0] = 0;
}
}
};