编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
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)
辅助数组
void
setZeroes(int** matrix, int matrixSize, int* matrixColSize)
{
// 用 row, column 记录数组行列
int matrixRow = matrixSize;
int matrixColumn = matrixColSize[0];
// 申请辅助数组
int newMatrix[matrixRow][matrixColumn];
// 复制原数组
for (int i = 0; i < matrixRow; i ++)
{
for (int j = 0; j < matrixColumn; j ++)
{
newMatrix[i][j] = matrix[i][j];
}
}
// 遍历原数组, 寻找0元素, 并对辅助数组进行修改
for (int i = 0; i < matrixRow; i ++)
{
for (int j = 0; j < matrixColumn; j ++)
{
if (matrix[i][j] == 0)
{
for (int k = 0; k < matrixColumn; k ++)
{
newMatrix[i][k] = 0;
}
for (int x = 0; x < matrixRow; x ++)
{
newMatrix[x][j] = 0;
}
}
}
}
// 将修改的辅助数组录入原数组
for (int i = 0; i < matrixRow; i ++)
{
for (int j = 0; j < matrixColumn; j ++)
{
matrix[i][j] = newMatrix[i][j];
}
}
return matrix;
}