更新 0 所在的行和列
题目要求将零所在的行和列的所有数都设置成零。
粗一看,扫面矩阵,遇到 0 之后把所在行所在列的都设置成 0。但是,很快会发现,整个矩阵都是 0 了。这显然不符合题目的要求。
正确的做法应该是先扫描一次矩阵,看那些位置上出现了 0,我们不用精确的记录位置,只要记录要标记为 0 的行号和列号就好了,这里使用 bool
数组完成这件事。接着第二次扫描数组,根据第一次扫描记录的结果,把对应元素设置成 0 即可。
public static void SetZeros(int[,] matrix)
{
int m = matrix.GetLength(0);
int n = matrix.GetLength(1);
bool[] row = new bool[m];
bool[] col = new bool[n];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (matrix[i, j] == 0)
{
row[i] = true;
col[j] = true;
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (row[i] || col[j])
{
matrix[i, j] = 0;
}
}
}
}