编写一种算法,若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]
]
void row_set_zero(int** matrix, int i, int len){
for(int j = 0; j < len; j++) //将对应行置 0
matrix[i][j] = 0;
}
void column_set_zero(int** matrix, int i, int len){
for(int j = 0; j < len; j++) //将对应列置 0
matrix[j][i] = 0;
}
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
int m = *matrixColSize; //列
int n = matrixSize; //行
int row[n], col[m];
memset(row, 0, sizeof(row));
memset(col, 0, sizeof(col));
for(int i = 0; i < n; i++){ //记录元素为0 的行下标 和 列下标
for(int j = 0; j < m; j++){
if(matrix[i][j] == 0){
row[i] = 1; //将对应行下标标记
col[j] = 1; //将对应列下标标记
}
}
}
for(int i = 0; i < n; i++)
if(row[i]) //将标记后的行对应行置 0
row_set_zero(matrix, i, m);
for(int j = 0 ; j < m; j++) //将标记后的行对应行置 0
if(col[j])
column_set_zero(matrix, j, n);
}