题目要求
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。
示例
示例一:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例二:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
解法
第一步:在二维数组中找出为0的元素,并用一维数组存取该元素的所在的行和列,直到遍历完此二维数组。
第二步:根据一位数组的长度,分别对行和列置0
第三步:由于一位数组第一位存的是行,第二位存的是列,第三位存存的是行,第四位存的是列,以此类推。采用mod运算,为0的则为行,则对该行所有元素置0,为1则为列,则对该列所有元素置0,以此类推,直到一维数组遍历完成。
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
int row = matrixSize;
int col = matrixColSize[0];
int array[256];
array[0] = 32768;
int index = 1;
int row_index = 0;
int col_index = 0;
for(int i=0; i<row; i++)
for(int j=0; j<col; j++){
if(matrix[i][j] == 0){
array[index++] = i;
array[index++] = j;
}
}
for(int x = 1; x < index; x++){
if(x%2!=0){
//行置0
row_index = array[x];
for(int j=0; j<col; j++){
matrix[row_index][j] = 0;
}
}else if(x%2==0){
//列置0
col_index = array[x];
for(int i=0; i<row; i++){
matrix[i][col_index] = 0;
}
}
}
}