若直接遍历整个矩阵,发现为零的元素就直接将所在行与列清零,这样做有一个陷阱,在读取已被清零的行或列时,读到的全是零,于是所在的行或列都变成零。
很快整个矩阵的所有元素都全部变为零了。
其实我们并不关心具体的行号和列号,反正整行和整列都会被清零,我们可以标记出零元素的行号和列号,根据这个来进行清零
public class setZeros {
public void setZero(int[][] matrix)
{
boolean[] row = new boolean[matrix.length];
boolean[] column = new boolean[matrix[0].length];
for (int i = 0; i < matrix.length; i++)
{
for (int j = 0; j < matrix[0].length; j++)
{
if (matrix[i][j] == 0)
{
row[i] = true;
column[j] = true;
}
}
}
for (int i = 0; i < matrix.length; i++)
{
for (int j = 0; j < matrix[0].length; j++)
{
if(row[i] || column[j])
{
matrix[i][j] = 0;
}
}
}
}
}