73. Matrix zeros

#include <stdbool.h>
#include <stdlib.h>

void setZeroes(int **matrix, int matrixSize, int *matrixColSize) {
  int m = matrixSize, n = matrixColSize[0];
  bool *zeroRow = calloc(m, sizeof(bool));
  bool *zeroCol = calloc(n, sizeof(bool));

  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
      if (matrix[i][j] == 0)
        zeroRow[i] = zeroCol[j] = true;

  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
      if (zeroRow[i] || zeroCol[j])
        matrix[i][j] = 0;

  free(zeroRow);
  free(zeroCol);
}
#include <vector>

using namespace std;

class Solution {
public:
  void setZeroes(vector<vector<int>> &matrix) {
    int m = matrix.size(), n = matrix[0].size();
    vector<bool> zeroRow(m, false), zeroCol(n, false);

    for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
        if (matrix[i][j] == 0)
          zeroRow[i] = zeroCol[j] = true;

    for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
        if (zeroRow[i] || zeroCol[j])
          matrix[i][j] = 0;
  }
};
package mathgeometry

func setZeroes(matrix [][]int) {
    m, n := len(matrix), len(matrix[0])
    zeroRow, zeroCol := make([]bool, m), make([]bool, n)

    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            if matrix[i][j] == 0 {
                zeroRow[i], zeroCol[j] = true, true
            }
        }
    }

    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            if zeroRow[i] || zeroCol[j] {
                matrix[i][j] = 0
            }
        }
    }
}
class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        boolean[] zeroRow = new boolean[m], zeroCol = new boolean[n];

        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                if (matrix[i][j] == 0)
                    zeroRow[i] = zeroCol[j] = true;

        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                if (zeroRow[i] || zeroCol[j])
                    matrix[i][j] = 0;
    }
}
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var setZeroes = function (matrix) {
  const m = matrix.length, n = matrix[0].length;
  const zeroRow = new Array(m).fill(false), zeroCol = new Array(n).fill(false);

  for (let i = 0; i < m; i++)
    for (let j = 0; j < n; j++)
      if (matrix[i][j] === 0) zeroRow[i] = zeroCol[j] = true;

  for (let i = 0; i < m; i++)
    for (let j = 0; j < n; j++)
      if (zeroRow[i] || zeroCol[j]) matrix[i][j] = 0;
};
from typing import List


class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        m, n = len(matrix), len(matrix[0])
        zero_row, zero_col = [False] * m, [False] * n

        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0:
                    zero_row[i] = zero_col[j] = True

        for i in range(m):
            for j in range(n):
                if zero_row[i] or zero_col[j]:
                    matrix[i][j] = 0
impl Solution {
    pub fn set_zeroes(matrix: &mut Vec<Vec<i32>>) {
        let (m, n) = (matrix.len(), matrix[0].len());
        let (mut zero_row, mut zero_col) = (vec![false; m], vec![false; n]);

        for i in 0..m {
            for j in 0..n {
                if matrix[i][j] == 0 {
                    zero_row[i] = true;
                    zero_col[j] = true;
                }
            }
        }

        for i in 0..m {
            for j in 0..n {
                if zero_row[i] || zero_col[j] {
                    matrix[i][j] = 0;
                }
            }
        }
    }
}