/** * Given a m x n matrix, if an element is 0, set its entire row and column to * 0. Do it in place. * * Tags: Array */ class SetMartixZeros { public static void main(String[] args) { } /** * Go through the matrix and use first row and first col to remember which * cols and rows are to be sets * Use two flags for whether first row and first col should be set */ public static void setZeros(int[][] matrix) { int row = matrix.length; int col = matrix[0].length; boolean firstRow = false; boolean firstCol = false; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; if (i == 0) firstRow = true; if (j == 0) firstCol = true; } } } for (int i = row - 1; i > 0; i--) { if (matrix[i][0] == 0) { for (int j = col - 1; j > 0; j--) { matrix[i][j] = 0; } } } for (int j = col - 1; j > 0; j--) { if (matrix[0][j] == 0) { for (int k = row - 1; k > 0; k--) { matrix[k][j] = 0; } } } if (firstRow) { for (int j = 0; j < col; j++) { matrix[0][j] = 0; } } if (firstCol) { for (int i = 0; i < row; i++) { matrix[i][0] = 0; } } } }