编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/array-and-string/ciekh/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
每次找到等于零的那一个把对应的行和列都置零即可,但是会出现一个问题就是到最后所有的元素都变成零了;
因此,既然打算将整行和整列清零,因此并不需要标记录它是cell[2][4](行2,列4),只需要记录那行那列需要被清零即可。
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
int *col_record = malloc(*matrixColSize * sizeof(int));
int *row_record = malloc(matrixSize * sizeof(int));
memset(col_record, 0 , *matrixColSize * sizeof(int));
memset(row_record, 0 , matrixSize * sizeof(int));
for (int i = 0; i < matrixSize; i++)
{
for (int j = 0; j < (*matrixColSize); j++)
{
if (matrix[i][j] == 0)
{
col_record[j] = 1;
row_record[i] = 1;
}
}
}
for (int i = 0; i < (*matrixColSize); i++)
{
if (col_record[i] == 1)
{
for (int j = 0; j < matrixSize; j++)
{
matrix[j][i] = 0;
}
}
}
for (int i = 0; i < matrixSize; i++)
{
if (row_record[i] == 1)
{
for (int j = 0; j < (*matrixColSize); j++)
{
matrix[i][j] = 0;
}
}
}
free(row_record);
free(col_record);
}