一点一点前进...

0%

矩阵:如果某元素为零,则设置所在行整所在列的所有元素为零

粗一看,扫面矩阵,遇到0之后把所在行所在列的都设置成0。但是,很快会发现,整个矩阵都是0了。这显然不符合题目的要求。

正确的做法应该是先扫面一次矩阵,看那些位置上出现了0,我们不用精确的记录位置,只要记录要标记为0的行号和列号就好了,这里,使用bool数组完成这件事。接着第二次扫描数组,根据第一次扫描记录的结果,把对应元素设置成0即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
}
}
}
}