题目描述:
编写一种算法,若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();
}
}
}
该博客介绍了一种处理矩阵中元素为0的算法,当遇到0时,标记其所在行和列,然后遍历矩阵将标记过的行和列元素设为0。这种方法避免了直接操作导致的全矩阵清零问题。提供的Java代码示例展示了如何原地修改矩阵。
1258

被折叠的 条评论
为什么被折叠?



