Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Follow up:
Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
=============
Analysis:
2 steps only, for solving this problem in place.
1. Mark down the positions of all the 0 elements.
2. Set entire row and column to 0 according to the positions we stored from step 1.
public class Solution {
public void setZeroes(int[][] matrix) {
int row = matrix.length;
int col = matrix[0].length;
if(row == 0 || col == 0) return;
// array list to store all the position of elements 0
ArrayList<ArrayList<Integer>> zeroSet = new ArrayList<ArrayList<Integer>>();
// find out of all the 0 elements
for (int i=0; i<row; i++){
for(int j=0; j<col; j++){
ArrayList<Integer> zero = new ArrayList<Integer>();
if(matrix[i][j]==0) {
zero.add(i);
zero.add(j);
zeroSet.add(zero);
}
}
}
// overwrite the matrix, set 0 elements' entire row and column to 0
for(int i=0; i<zeroSet.size(); i++){
ArrayList<Integer> zero = new ArrayList<Integer>();
zero = zeroSet.get(i);
int rowZero = zero.get(0);
int colZero = zero.get(1);
for (int k=0; k<col; k++) matrix[rowZero][k] = 0;
for (int k=0; k<row; k++) matrix[k][colZero] = 0;
}
}
}