📖 Scenario: You are working with a grid of numbers representing a spreadsheet. Sometimes, if a cell has zero, the entire row and column must be cleared to zero to mark errors.
🎯 Goal: Modify the given matrix so that if any cell is zero, its entire row and column become zero. Do this change inside the same matrix without using extra space for another matrix.
📋 What You'll Learn
Create a 2D vector called matrix with the exact values given
Create two boolean variables firstRowZero and firstColZero to track zeros in first row and column
Use the first row and first column of matrix to mark which rows and columns should be zeroed
Update the matrix in place based on these markers
Print the matrix after modification in the format: each row on a new line, values separated by spaces
💡 Why This Matters
🌍 Real World
This technique is useful in spreadsheet software and image processing where zero values indicate errors or special conditions that affect entire rows and columns.
💼 Career
Understanding in-place matrix manipulation is important for software engineers working with data grids, databases, and performance-critical applications.
Progress0 / 4 steps
1
Create the initial matrix
Create a 2D vector of integers called matrix with these exact values: {{1,1,1},{1,0,1},{1,1,1}}
DSA C++
Hint
Use vector> matrix = {{1,1,1},{1,0,1},{1,1,1}}; to create the matrix.
2
Add flags for first row and first column zeros
Add two boolean variables called firstRowZero and firstColZero and set both to false
Mark rows and columns to be zeroed using first row and column
Write code to check if the first row has zero and set firstRowZero accordingly. Then check if the first column has zero and set firstColZero. Next, use a for loop with i from 1 to matrix.size() and a nested for loop with j from 1 to matrix[0].size() to mark zeros in first row and column by setting matrix[i][0] and matrix[0][j] to zero if matrix[i][j] is zero.
DSA C++
Hint
Use loops to check first row and column for zeros. Then use nested loops starting from 1 to mark zeros in first row and column.
4
Set matrix zeroes in place and print the matrix
Use nested for loops with i from 1 to matrix.size() and j from 1 to matrix[0].size() to set matrix[i][j] to zero if matrix[i][0] or matrix[0][j] is zero. Then, if firstRowZero is true, set all elements in the first row to zero. If firstColZero is true, set all elements in the first column to zero. Finally, print the matrix row by row with values separated by spaces.
DSA C++
Hint
Use loops to update matrix cells to zero if marked. Then update first row and column if needed. Finally, print the matrix row by row.
Practice
(1/5)
1. What is the main goal of the Set Matrix Zeroes In Place problem?
easy
A. Sort each row of the matrix in ascending order.
B. Find the sum of all elements in the matrix.
C. Count the number of zero elements in the matrix.
D. Modify the matrix so that if an element is 0, its entire row and column become 0 without using extra space.
Solution
Step 1: Understand the problem requirement
The problem requires changing the matrix so that any row or column containing a zero is set entirely to zero.
Step 2: Note the in-place constraint
We must do this without using extra space for another matrix or large data structures.
Final Answer:
Modify the matrix so that if an element is 0, its entire row and column become 0 without using extra space. -> Option D
Quick Check:
In-place zeroing = Modify matrix rows and columns [OK]
Hint: Remember: zero means zero entire row and column in place [OK]
Common Mistakes:
Using extra space like another matrix
Only zeroing the element itself, not row and column
Not handling the in-place requirement
2. Which of the following C++ code snippets correctly declares a 2D vector to represent a matrix for the Set Matrix Zeroes In Place problem?
easy
A. std::vector matrix(cols, std::vector<int>(rows));
B. std::vector<int> matrix(rows, cols);
C. std::vector matrix(rows, std::vector<int>(cols));
D. std::vector<int> matrix[rows][cols];
Solution
Step 1: Understand 2D vector declaration
To create a matrix with 'rows' rows and 'cols' columns, use vector of vectors with inner vector size 'cols'.
Step 2: Check each option
std::vector matrix(rows, std::vector<int>(cols)); correctly creates a vector of vectors with 'rows' outer vectors and 'cols' inner vectors each.
Final Answer:
std::vector matrix(rows, std::vector<int>(cols)); -> Option C
Hint: Use vector of vectors with inner vector size as columns [OK]
Common Mistakes:
Using single vector with two sizes incorrectly
Swapping rows and columns in inner vector
Using array syntax instead of vector
3. What will be the state of the matrix after running the following code snippet for Set Matrix Zeroes In Place?
std::vector matrix = {
{1, 2, 3},
{4, 0, 6},
{7, 8, 9}
};
// Assume correct in-place zeroing function is called here
setZeroes(matrix);
// Print matrix
medium
A. [[1, 2, 3], [4, 0, 6], [7, 8, 9]]
B. [[1, 0, 3], [0, 0, 0], [7, 0, 9]]
C. [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
D. [[1, 2, 3], [0, 0, 0], [7, 8, 9]]
Solution
Step 1: Identify zero positions
The zero is at position (1,1) (second row, second column).
Step 2: Set entire row and column to zero
Row 1 becomes [0,0,0], column 1 becomes zero in rows 0 and 2, so matrix becomes [[1,0,3],[0,0,0],[7,0,9]].
Final Answer:
[[1, 0, 3], [0, 0, 0], [7, 0, 9]] -> Option B
Quick Check:
Zero at (1,1) zeroes row 1 and column 1 [OK]
Hint: Zero row and column where zero found [OK]
Common Mistakes:
Zeroing entire matrix instead of row and column
Not zeroing column correctly
Leaving original zero row unchanged
4. Consider this buggy code snippet for Set Matrix Zeroes In Place. What is the main error?
void setZeroes(std::vector& matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == 0) {
for (int k = 0; k < cols; k++) matrix[i][k] = 0;
for (int k = 0; k < rows; k++) matrix[k][j] = 0;
}
}
}
}
medium
A. Modifying matrix inside loops causes multiple zeroing and incorrect results.
B. The loops do not cover all rows and columns.
C. The function does not return the modified matrix.
D. The matrix size is not checked for empty input.
Solution
Step 1: Analyze modification during iteration
The code sets zeros immediately when a zero is found, changing matrix during iteration.
Step 2: Understand side effects
This causes new zeros to appear and cause more zeroing, leading to incorrect results.
Final Answer:
Modifying matrix inside loops causes multiple zeroing and incorrect results. -> Option A