Medium
Given an m x n
integer matrix matrix
, if an element is 0
, set its entire row and column to 0
’s, and return the matrix.
You must do it in place.
Example 1:
Input: matrix = [[1,1,1],[1,0,1],[1,1,1]]
Output: [[1,0,1],[0,0,0],[1,0,1]]
Example 2:
Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
Output: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]
Constraints:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
Follow up:
O(mn)
space is probably a bad idea.O(m + n)
space, but still not the best solution.To solve the “Set Matrix Zeroes” problem in Swift with the Solution class, follow these steps:
setZeroes
in the Solution
class that takes a 2D integer matrix matrix
as input and modifies it in place to set the entire row and column to zeros if an element is zero.rowZero
and colZero
of size m
and n
respectively, where m
is the number of rows in the matrix and n
is the number of columns. These arrays will track whether a row or column needs to be set to zero.matrix[i][j]
is zero, set rowZero[i] = true
and colZero[j] = true
.rowZero[i] = true
or the entire column to zeros if colZero[j] = true
.Here’s the implementation of the setZeroes
method in Swift:
class Solution {
func setZeroes(_ matrix: inout [[Int]]) {
var rows = Set<Int>()
var columns = Set<Int>()
//traverse the matrix
for i in 0..<matrix.count {
for j in 0..<matrix[i].count {
if matrix[i][j] == 0 {
rows.insert(i)
columns.insert(j)
}
}
}
//change rows
for row in rows {
matrix[row] = Array(repeating: 0, count: matrix[row].count)
}
//change columns
for column in columns {
for row in 0..<matrix.count {
matrix[row][column] = 0
}
}
}
}
This implementation modifies the matrix in place to set entire rows and columns to zeros, with a time complexity of O(m * n) and a space complexity of O(m + n), where m
is the number of rows and n
is the number of columns in the matrix.