Set Matrix Zeroes
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;
}