题目
题解
代码:
import java.util.*;
public class code73 {
// public static void setZeroes(int[][] matrix) {
// int m = matrix.length;
// int n = matrix[0].length;
// int temp[][] = new int[m][n];
// for (int i = 0; i < m; i++) {
// for (int j = 0; j < n; j++) {
// temp[i][j] = matrix[i][j];
// }
// }
// for (int i = 0; i < m; i++) {
// for (int j = 0; j < n; j++) {
// if (temp[i][j] == 0) {
// for (int k = 0; k < n; k++) {
// matrix[i][k] = 0;
// }
// }
// }
// }
// for (int j = 0; j < n; j++) {
// for (int i = 0; i < m; i++) {
// if (temp[i][j] == 0) {
// for (int k = 0; k < m; k++) {
// matrix[k][j] = 0;
// }
// }
// }
// }
// }
// public static void setZeroes(int[][] matrix) {
// int R = matrix.length;
// int C = matrix[0].length;
// Set<Integer> rows = new HashSet<Integer>();
// Set<Integer> cols = new HashSet<Integer>();
// for (int i = 0; i < R; i++) {
// for (int j = 0; j < C; j++) {
// if (matrix[i][j] == 0) {
// rows.add(i);
// cols.add(j);
// }
// }
// }
// for (int i = 0; i < R; i++) {
// for (int j = 0; j < C; j++) {
// if (rows.contains(i) || cols.contains(j)) {
// matrix[i][j] = 0;
// }
// }
// }
// }
public static void setZeroes(int[][] matrix) {
int row = matrix.length;
int col = matrix[0].length;
// 记录第 1 行 第 1 列的标识 最后有用的
boolean row0_flag = false;
boolean col0_flag = false;
// 第一行是否有零
for (int j = 0; j < col; j++) {
if (matrix[0][j] == 0) {
row0_flag = true;
break;
}
}
// 第一列是否有零
for (int i = 0; i < row; i++) {
if (matrix[i][0] == 0) {
col0_flag = true;
break;
}
}
// 把第一行第一列作为标志位
// 从(1,1)开始继续标记数据
for (int i = 1; i < row; i++) {
for (int j = 1; j < col; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0; // 标记最左边的数据
matrix[0][j] = 0; // 标记最上面的数据
}
}
}
// 从(1,1)开始处理数据, 置 0
for (int i = 1; i < row; i++) {
for (int j = 1; j < col; j++) {
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
}
// 处理第 1 行第 1 列标识的数据
// 如果第一行有零
if (row0_flag) {
for (int j = 0; j < col; j++) {
matrix[0][j] = 0;
}
}
// 如果第一列有零
if (col0_flag) {
for (int i = 0; i < row; i++) {
matrix[i][0] = 0;
}
}
}
public static void main(String[] args) {
int matrix[][] = { { 0, 1, 2, 0 }, { 3, 4, 5, 2 }, { 1, 3, 1, 5 } };
setZeroes(matrix);
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}