Given an m x n integer matrix matrix, if an element is 0, set its entire row and column to 0's.
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.lengthn == matrix[0].length1 <= 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.class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
Set<Integer> Is = new HashSet<>();
Set<Integer> Js = new HashSet<>();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
Is.add(i);
Js.add(j);
}
}
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (Is.contains(i) || Js.contains(j))
matrix[i][j] = 0;
}
}class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
boolean[] row0 = new boolean[m];
boolean[] col0 = new boolean[n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (matrix[i][j] == 0) {
row0[i] = true;
col0[j] = true;
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (row0[i] || col0[j])
matrix[i][j] = 0;
}
}