1public void setZeroes(int[][] matrix) {
2 int m = matrix.length, n = matrix[0].length;
3 boolean firstRowZero = false, firstColZero = false;
4
5 // Check first row and column
6 for (int j = 0; j < n; j++)
7 if (matrix[0][j] == 0) firstRowZero = true;
8 for (int i = 0; i < m; i++)
9 if (matrix[i][0] == 0) firstColZero = true;
10
11 // Use first row/col as markers
12 for (int i = 1; i < m; i++) {
13 for (int j = 1; j < n; j++) {
14 if (matrix[i][j] == 0) {
15 matrix[i][0] = 0;
16 matrix[0][j] = 0;
17 }
18 }
19 }
20
21 // Set zeros based on markers
22 for (int i = 1; i < m; i++) {
23 for (int j = 1; j < n; j++) {
24 if (matrix[i][0] == 0 || matrix[0][j] == 0)
25 matrix[i][j] = 0;
26 }
27 }
28
29 // Handle first row and column
30 if (firstRowZero)
31 for (int j = 0; j < n; j++) matrix[0][j] = 0;
32 if (firstColZero)
33 for (int i = 0; i < m; i++) matrix[i][0] = 0;
34}