数据结构与算法每日一题——矩阵置零

矩阵置零

题目要求

给定一个 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;
             }
         }
     }

}

猜你喜欢

转载自blog.csdn.net/News53231323/article/details/119982214