题目及解法如下:
public class lingjuzhen {
/*
问题:编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
*/
public void setZeroes(int[][] matrix) {
int[] hang=new int[2000];
int[] lie=new int[2000];
int a=0;
int b=0;
//依次遍历二维数组,并将含有0的元素对应的行列存在两个数组中
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
if(matrix[i][j]==0){
//注意,此时二维数组的i为列数,j为行数
hang[a++]=j;
lie[b++]=i;
}
}
}
// 将0遍历进数组,指定的行和列可以在hang【】和lie【】中读取
//注意,这里需用i<a,因为数组在定义时会初始化全是0
for(int i=0;i<a;i++){
//将第hang【i】行的所有数变成0
//注意,二位数组第一个【】是列!!!
for(int j=0;j<matrix[lie[i]].length;j++){
//列不变,行依次赋值,第一个[]填列
matrix[lie[i]][j]=0;
}
//将第lie[i]裂赋值0
for(int m=0;m<matrix.length;m++){
//行不变,列依次赋值,第二个[]填行
matrix[m][hang[i]]=0;
}
}
}
}