Data Structure & Algorithms
Arrays Two Dimensional
Row to Column Zero

# Row to Column Zero

## Problem Description

You are given a 2D integer matrix A, make all the elements in a row or column zero if the A[i][j] = 0. Specifically, make entire ith row and jth column zero.

### Problem Constraints

``````1 <= A.size() <= 10^3
1 <= A[i].size() <= 10^3
0 <= A[i][j] <= 10^3``````

### Input Format

``First argument is a 2D integer matrix A.``

### Output Format

``Return a 2D matrix after doing required operations.``

### Example Input

``````Input 1:
[1,2,3,4]
[5,6,7,0]
[9,2,0,4]``````

### Example Output

``````Output 1:
[1,2,0,0]
[0,0,0,0]
[0,0,0,0]``````

### Example Explanation

``````Explanation 1:
A[2][4] = A[3][3] = 0, so make 2nd row, 3rd row, 3rd column and 4th column zero.``````

### Output

Java
``````import java.util.*;

public class ZeroMatrix {
public int[][] setZeroes(int[][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
boolean firstRowHasZero = false;
boolean firstColHasZero = false;

// Check if the first row has a zero
for (int j = 0; j < cols; j++) {
if (matrix[0][j] == 0) {
firstRowHasZero = true;
break;
}
}

// Check if the first column has a zero
for (int i = 0; i < rows; i++) {
if (matrix[i][0] == 0) {
firstColHasZero = true;
break;
}
}

// Mark zeros on first row and first column
for (int i = 1; i < rows; i++) {
for (int j = 1; j < cols; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}

// Set zeros based on markings in first row and column
for (int i = 1; i < rows; i++) {
for (int j = 1; j < cols; j++) {
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
}

// Set zeros for first row if needed
if (firstRowHasZero) {
for (int j = 0; j < cols; j++) {
matrix[0][j] = 0;
}
}

// Set zeros for first column if needed
if (firstColHasZero) {
for (int i = 0; i < rows; i++) {
matrix[i][0] = 0;
}
}

return matrix;
}
}``````
Python
``````def setZeroes(matrix):
rows = len(matrix)
cols = len(matrix[0])
first_row_has_zero = False
first_col_has_zero = False

for j in range(cols):
if matrix[0][j] == 0:
first_row_has_zero = True
break

for i in range(rows):
if matrix[i][0] == 0:
first_col_has_zero = True
break

for i in range(1, rows):
for j in range(1, cols):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0

for i in range(1, rows):
for j in range(1, cols):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0

if first_row_has_zero:
for j in range(cols):
matrix[0][j] = 0

if first_col_has_zero:
for i in range(rows):
matrix[i][0] = 0

return matrix``````
JavaScript
``````function setZeroes(matrix) {
const rows = matrix.length;
const cols = matrix[0].length;
let firstRowHasZero = false;
let firstColHasZero = false;

for (let j = 0; j < cols; j++) {
if (matrix[0][j] === 0) {
firstRowHasZero = true;
break;
}
}

for (let i = 0; i < rows; i++) {
if (matrix[i][0] === 0) {
firstColHasZero = true;
break;
}
}

for (let i = 1; i < rows; i++) {
for (let j = 1; j < cols; j++) {
if (matrix[i][j] === 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}

for (let i = 1; i < rows; i++) {
for (let j = 1; j < cols; j++) {
if (matrix[i][0] === 0 || matrix[0][j] === 0) {
matrix[i][j] = 0;
}
}
}

if (firstRowHasZero) {
for (let j = 0; j < cols; j++) {
matrix[0][j] = 0;
}
}

if (firstColHasZero) {
for (let i = 0; i < rows; i++) {
matrix[i][0] = 0;
}
}

return matrix;
}``````