Set Matrix Zeroes

Medium Matrix
If an element in a matrix is 0, set its entire row and column to 0. First record which rows and columns to zero, then apply.

Sample input

[[1,1,1],[1,0,1],[1,1,1]]

Sample output

1 0 1 0 0 0 1 0 1

Solution

def set_zeroes(matrix):
    rows, cols = set(), set()
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if matrix[i][j] == 0:
                rows.add(i)
                cols.add(j)
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if i in rows or j in cols:
                matrix[i][j] = 0
    return matrix

for row in set_zeroes([[1, 1, 1], [1, 0, 1], [1, 1, 1]]):
    print(*row)
function setZeroes(matrix) {
  const rows = new Set(), cols = new Set();
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[0].length; j++) {
      if (matrix[i][j] === 0) {
        rows.add(i);
        cols.add(j);
      }
    }
  }
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[0].length; j++) {
      if (rows.has(i) || cols.has(j)) matrix[i][j] = 0;
    }
  }
  return matrix;
}

for (const row of setZeroes([[1, 1, 1], [1, 0, 1], [1, 1, 1]])) {
  console.log(row.join(" "));
}
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
    static void setZeroes(int[][] matrix) {
        Set<Integer> rows = new HashSet<>(), cols = new HashSet<>();
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j] == 0) {
                    rows.add(i);
                    cols.add(j);
                }
            }
        }
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (rows.contains(i) || cols.contains(j)) matrix[i][j] = 0;
            }
        }
    }

    public static void main(String[] args) {
        int[][] matrix = {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
        setZeroes(matrix);
        for (int[] row : matrix) {
            System.out.println(IntStream.of(row).mapToObj(String::valueOf).collect(Collectors.joining(" ")));
        }
    }
}
fun setZeroes(matrix: Array<IntArray>) {
    val rows = HashSet<Int>()
    val cols = HashSet<Int>()
    for (i in matrix.indices) {
        for (j in matrix[0].indices) {
            if (matrix[i][j] == 0) {
                rows.add(i)
                cols.add(j)
            }
        }
    }
    for (i in matrix.indices) {
        for (j in matrix[0].indices) {
            if (i in rows || j in cols) matrix[i][j] = 0
        }
    }
}

fun main() {
    val matrix = arrayOf(intArrayOf(1, 1, 1), intArrayOf(1, 0, 1), intArrayOf(1, 1, 1))
    setZeroes(matrix)
    for (row in matrix) {
        println(row.joinToString(" "))
    }
}
func setZeroes(_ matrix: inout [[Int]]) {
    var rows = Set<Int>()
    var cols = Set<Int>()
    for i in 0..<matrix.count {
        for j in 0..<matrix[0].count {
            if matrix[i][j] == 0 {
                rows.insert(i)
                cols.insert(j)
            }
        }
    }
    for i in 0..<matrix.count {
        for j in 0..<matrix[0].count {
            if rows.contains(i) || cols.contains(j) {
                matrix[i][j] = 0
            }
        }
    }
}

var matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]
setZeroes(&matrix)
for row in matrix {
    print(row.map(String.init).joined(separator: " "))
}
void setZeroes(List<List<int>> matrix) {
  final rows = <int>{};
  final cols = <int>{};
  for (var i = 0; i < matrix.length; i++) {
    for (var j = 0; j < matrix[0].length; j++) {
      if (matrix[i][j] == 0) {
        rows.add(i);
        cols.add(j);
      }
    }
  }
  for (var i = 0; i < matrix.length; i++) {
    for (var j = 0; j < matrix[0].length; j++) {
      if (rows.contains(i) || cols.contains(j)) matrix[i][j] = 0;
    }
  }
}

void main() {
  final matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]];
  setZeroes(matrix);
  for (final row in matrix) {
    print(row.join(' '));
  }
}
#include <iostream>
#include <vector>
#include <set>
using namespace std;

void setZeroes(vector<vector<int>>& matrix) {
    set<int> rows, cols;
    for (int i = 0; i < (int) matrix.size(); i++) {
        for (int j = 0; j < (int) matrix[0].size(); j++) {
            if (matrix[i][j] == 0) {
                rows.insert(i);
                cols.insert(j);
            }
        }
    }
    for (int i = 0; i < (int) matrix.size(); i++) {
        for (int j = 0; j < (int) matrix[0].size(); j++) {
            if (rows.count(i) || cols.count(j)) matrix[i][j] = 0;
        }
    }
}

int main() {
    vector<vector<int>> matrix = {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
    setZeroes(matrix);
    for (auto& row : matrix) {
        for (int j = 0; j < (int) row.size(); j++) {
            cout << row[j];
            if (j < (int) row.size() - 1) cout << " ";
        }
        cout << endl;
    }
    return 0;
}
#include <stdio.h>

int main() {
    int matrix[3][3] = {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
    int rows = 3, cols = 3;
    int rowZero[3] = {0}, colZero[3] = {0};
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (matrix[i][j] == 0) {
                rowZero[i] = 1;
                colZero[j] = 1;
            }
        }
    }
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (rowZero[i] || colZero[j]) matrix[i][j] = 0;
        }
    }
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d", matrix[i][j]);
            if (j < cols - 1) printf(" ");
        }
        printf("\n");
    }
    return 0;
}