题目描述
给你一个 m x n 的矩阵,你要把这个矩阵中等于 0 的元素所在的行和列都置 0。
比如说,给你的矩阵 a 是:
1, 2, 3
4, 0, 6
0, 8, 9
这个矩阵中有两个 0,把它们所在的行和列都置 0 后,得到的矩阵是:
0, 0, 3
0, 0, 0
0, 0, 0
思路
- 先定义2个boolean数组,用来记录值为0的元素的横排位置和竖排位置。
- 遍历矩阵,找出值为0的元素,再将其横排和竖排的位置写到boolean数组里。
- 再遍历矩阵,只要元素所在的横排或者竖排存在0,则此元素置为0。
代码实现(Java)
public class AlgoMatrixSetZero {
public void setZeroInMatrix(int[][] a) {
int m = a.length, n = a[0].length;
boolean[] rows = new boolean[m];
boolean[] cols = new boolean[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] == 0) {
rows[i] = true;
cols[j] = true;
}
}
}
for (int i = 0; i < rows.length; i++) {
for (int j = 0; j < cols.length; j++) {
if (rows[i] || cols[j]) {
a[i][j] = 0;
}
}
}
//这里只是输出验证
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print(a[i][j]);
if (j == m - 1) {
System.out.print("\n");
}
}
}
}
public static void main(String[] args) {
int[][] a = new int[3][3];
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 4;
a[1][1] = 0;
a[1][2] = 6;
a[2][0] = 0;
a[2][1] = 8;
a[2][2] = 9;
AlgoMatrixSetZero algoMatrixSetZero = new AlgoMatrixSetZero();
algoMatrixSetZero.setZeroInMatrix(a);
}
}