题目描述:
编写一种算法,若M*N
矩阵中某个元素为0,则将其所在的行与列清零。
示例:
给定 matrix =
[
[0,2,3],
[4,0,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[0,0,0],
[0,0,0],
[0,0,9]
]
解题思路
直接遍历整个矩阵,只要发现值为0的元素,就将其所在的行与列清零。不过这种方法存在陷阱:在读取被清零的行或列时,读到的尽是0,于是所在行与列都得变成0,很快,整个矩阵的所有元素都会变为0。标记位置和清零需要分离。
public class Main {
public static void main(String[] args) {
int[][] array = {
{1,2,3},
{4,0,6},
{7,8,9}
};
int row = array.length;
int col = array[0].length;
int[] rowArr = new int[row];
int[] colArr = new int[col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (array[i][j] == 0){
rowArr[i] = 1;
colArr[j] = 1;
}
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (rowArr[i]==1 || colArr[j]==1){
array[i][j] =0;
}
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
}