Set Matrix Zeroes

Problem

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?

Solution

class Solution {
    public void setZeroes(int[][] matrix) {
        var rows = matrix.length;
        var cols = matrix[0].length;
        var zeroFirstCol = false;
        var zeroFirstRow = false;

        // mark
        for (var row = 0; row < rows; row++) {
            for (var col = 0; col < cols; col++) {
                if (matrix[row][0] == 0) {
                    zeroFirstCol = true;
                }

                if (matrix[0][col] == 0) {
                    zeroFirstRow = true;
                }
            }
        }

        for (var row = 1; row < rows; row++) {
            for (var col = 1; col < cols; col++) {
                if (matrix[row][col] == 0) {
                    matrix[row][0] = 0;
                    matrix[0][col] = 0;
                }
            }
        }

        // act
        for (var row = 1; row < rows; row++) {
            for (var col = 1; col < cols; col++) {
                if (matrix[row][0] == 0 || matrix[0][col] == 0) {
                    matrix[row][col] = 0;
                }
            }
        }

        for (var row = 0; row < rows; row++) {
            for (var col = 0; col < cols; col++) {
                if (zeroFirstCol && col == 0) {
                    matrix[row][0] = 0;
                }
                if (zeroFirstRow && row == 0) {
                    matrix[0][col] = 0;
                }
            }
        }
    }
}

Recent posts from blogs that I like

Compiling Scheme to WebAssembly

One of my oldest open-source projects - Bob - has celebrated 15 a couple of months ago. Bob is a suite of implementations of the Scheme programming language in Python, including an interpreter, a compiler and a VM. Back then I was doing some hacking on CPython internals and was very curious about ho...

via Eli Bendersky

A painted weekend in the Alhambra 1767-1883

Exquisite Arabic Muslim art and architecture in Granada, painted in topographic views, and by Franz von Lenbach, Henri Regnault, Martín Rico, Childe Hassam, Tom Roberts and others.

via The Eclectic Light Company

On the preparations before writing an essay

Shooting raw footage

via Henrik Karlsson