📖 Scenario: You are working on a spreadsheet application. Sometimes, when a cell in the spreadsheet is zero, the entire row and column of that cell should be cleared (set to zero) to indicate invalid or missing data.We want to update the spreadsheet matrix directly without using extra space for another matrix.
🎯 Goal: Write a Go program that modifies a 2D matrix in place. If any cell is zero, set its entire row and column to zero.
📋 What You'll Learn
Create a 2D slice of integers called matrix with the exact values [[1,1,1],[1,0,1],[1,1,1]]
Create two boolean variables firstRowHasZero and firstColHasZero to track zeros in the first row and first column
Implement the logic to set rows and columns to zero in place using the first row and column as markers
Print the modified matrix after applying the zeroing logic
💡 Why This Matters
🌍 Real World
Spreadsheet software and data cleaning tools often need to clear rows and columns based on invalid or missing data.
💼 Career
Understanding in-place matrix manipulation is useful for software engineers working with image processing, data analysis, and performance-critical applications.
Progress0 / 4 steps
1
Create the initial matrix
Create a 2D slice of integers called matrix with these exact values: [[1,1,1],[1,0,1],[1,1,1]]
DSA Go
Hint
Use a slice of slices to create the 2D matrix with the exact rows and columns.
2
Add variables to track zeros in first row and column
Create two boolean variables called firstRowHasZero and firstColHasZero and set them to false initially
DSA Go
Hint
Use varName := false to create boolean variables.
3
Implement the in-place zeroing logic
Write the code inside main to:
1. Check if the first row has any zero and update firstRowHasZero
2. Check if the first column has any zero and update firstColHasZero
3. Use the first row and column to mark zeros for other rows and columns
4. Set zeros in the matrix based on these markers
5. Finally, set zeros in the first row and first column if needed
DSA Go
Hint
Use nested loops and the first row and column as markers to track zeros. Then update the matrix accordingly.
4
Print the modified matrix
Write a for loop to print each row of the matrix after modification using fmt.Println(matrix[i])
DSA Go
Hint
Use a for loop from 0 to len(matrix) and print each row with fmt.Println(matrix[i]).
Practice
(1/5)
1. What is the main goal of the Set Matrix Zeroes In Place problem?
easy
A. Modify the matrix so that if an element is 0, its entire row and column become 0
B. Find the sum of all elements in the matrix
C. Sort each row of the matrix in ascending order
D. Transpose the matrix without changing its elements
Solution
Step 1: Understand the problem requirement
The problem asks to change the matrix so that any row or column containing a zero should be set entirely to zero.
Step 2: Identify the correct operation
Only Modify the matrix so that if an element is 0, its entire row and column become 0 describes this exact operation, modifying rows and columns based on zero elements.
Final Answer:
Modify the matrix so that if an element is 0, its entire row and column become 0 -> Option A
Quick Check:
Set rows and columns to zero = Modify matrix [OK]
Hint: Remember: zero means zero out whole row and column [OK]
Common Mistakes:
Confusing with matrix transpose
Trying to sum elements instead of modifying
Sorting rows instead of zeroing
2. Which of the following Go code snippets correctly declares a fixed-size 2D array of integers?
easy
A. matrix := [][]int{{1, 2}, {3, 4}}
B. matrix := [2][2]int{{1, 2}, {3, 4}}
C. matrix := [][]int{1, 2, 3, 4}
D. matrix := [2]int{1, 2, 3, 4}
Solution
Step 1: Understand Go 2D array declaration
In Go, fixed-size 2D arrays use syntax like [rows][cols]type, so [2][2]int is a 2x2 matrix.
Step 2: Check each option
matrix := [2][2]int{{1, 2}, {3, 4}} correctly declares a 2x2 integer array with values. matrix := [][]int{{1, 2}, {3, 4}} is a slice of slices (dynamic), not a fixed-size array. matrix := [][]int{1, 2, 3, 4} and D are invalid for 2D matrix.
Final Answer:
matrix := [2][2]int{{1, 2}, {3, 4}} -> Option B
Quick Check:
Fixed 2D array syntax = [2][2]int [OK]
Hint: Use [rows][cols]type for fixed 2D arrays in Go [OK]
Common Mistakes:
Using slice syntax when fixed array needed
Incorrect nesting of braces
Declaring 1D array instead of 2D
3. What will be the matrix after running the following Go code snippet?
matrix := [][]int{
{1, 2, 3},
{4, 0, 6},
{7, 8, 9},
}
// After applying Set Matrix Zeroes In Place logic
// (zero out rows and columns containing zero)
medium
A. [[1, 0, 3], [0, 0, 0], [0, 0, 0]]
B. [[1, 2, 3], [0, 0, 0], [7, 0, 9]]
C. [[1, 0, 3], [0, 0, 0], [7, 0, 9]]
D. [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Solution
Step 1: Identify zero positions
Zero is at matrix[1][1]. So row 1 and column 1 must be zeroed.
Step 2: Apply zeroing
Row 1 becomes [0,0,0]. Column 1 elements at rows 0 and 2 become 0. So matrix[0][1] and matrix[2][1] are zero.
Final Answer:
[[1, 0, 3], [0, 0, 0], [7, 0, 9]] -> Option C
Quick Check:
Zero row and column applied correctly = [[1,0,3],[0,0,0],[7,0,9]] [OK]
Hint: Zero entire row and column for each zero found [OK]
Common Mistakes:
Zeroing entire matrix
Missing zero in column 1 for rows 0 and 2
Zeroing wrong rows or columns
4. Consider this Go function snippet for setting matrix zeroes:
func setZeroes(matrix [][]int) {
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[0]); j++ {
if matrix[i][j] == 0 {
for k := 0; k < len(matrix); k++ {
matrix[k][j] = 0
}
for l := 0; l < len(matrix[0]); l++ {
matrix[i][l] = 0
}
}
}
}
}
What is the main problem with this code?
medium
A. It only zeros rows but not columns
B. It uses wrong loop ranges for rows and columns
C. It does not check for zero elements at all
D. It modifies the matrix while iterating, causing incorrect zeroing
Solution
Step 1: Analyze matrix modification during iteration
The code sets zeros immediately when it finds a zero, changing matrix elements during iteration.
Step 2: Understand side effects
This causes new zeros to appear and triggers more zeroing incorrectly, leading to wrong final matrix.
Final Answer:
It modifies the matrix while iterating, causing incorrect zeroing -> Option D
Quick Check:
In-place modification during scan = incorrect zeroing [OK]
Hint: Mark zeros first, then update matrix to avoid side effects [OK]
Common Mistakes:
Changing matrix while scanning
Not using extra storage or flags
Assuming immediate zeroing is safe
5. You want to set matrix zeroes in place with O(1) extra space. Which approach below correctly achieves this in Go?
hard
A. Use first row and first column as markers to track zero rows and columns, then update matrix accordingly
B. Create a separate boolean matrix to mark zero rows and columns, then update original matrix
C. Copy matrix to a new matrix and update zeros there to avoid modifying original during iteration
D. Use recursion to zero rows and columns when zero found
Solution
Step 1: Understand space constraints
O(1) extra space means no additional matrix or large data structures allowed.
Step 2: Use first row and column as markers
Mark zeros in first row and column to remember which rows and columns to zero later, then update matrix in place.
Step 3: Avoid extra space and recursion
Options A and B use extra space, D uses recursion unnecessarily.
Final Answer:
Use first row and first column as markers to track zero rows and columns, then update matrix accordingly -> Option A
Quick Check:
In-place markers = O(1) space zeroing [OK]
Hint: Use matrix edges as flags to save space [OK]
Common Mistakes:
Using extra arrays violating space constraint
Modifying matrix during iteration without markers
Overcomplicating with recursion
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.