Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Solution: can be much much simpler
public class Solution {
public void setZeroes(int[][] matrix) {
boolean left=false, right=false, up=false, down=false;
for(int i=0; i<matrix.length; i++){
if(matrix[i][0]==0) left=true;
if(matrix[i][matrix[0].length-1]==0) right=true;
}
for(int i=0; i<matrix[0].length; i++){
if(matrix[0][i]==0) up=true;
if(matrix[matrix.length-1][i]==0) down=true;
}
for(int i=0; i<matrix.length; i++){
for(int j=0; j<matrix[0].length; j++){
if(matrix[i][j]==0) matrix[0][j]=matrix[i][0]=0;
}
}
for(int i=1; i<matrix.length; i++){
if(matrix[i][0]==0){
for(int j=0; j<matrix[0].length; j++) matrix[i][j]=0;
}
}
for(int j=1; j<matrix[0].length-1; j++){
if(matrix[0][j]==0){
for(int i=1; i<matrix.length; i++) matrix[i][j]=0;
}
}
if(up) for(int j=0; j<matrix[0].length; j++) matrix[0][j]=0;
if(down) for(int j=0; j<matrix[0].length; j++) matrix[matrix.length-1][j]=0;
if(left) for(int i=0; i<matrix.length; i++) matrix[i][0]=0;
if(right) for(int i=0; i<matrix.length; i++) matrix[i][matrix[0].length-1]=0;
}
}