9.1数组与字符串(六)——若M*N矩阵中某个元素为0,则将其所在的行与列清零

/**
 * 功能:若M*N矩阵中某个元素为0,则将其所在的行与列清零。
 */
注意:陷阱!!!若直接遍历整个矩阵,只要发现值为零的元素,就将其所在的行与列清零。
在读取被清零的行或列时,读到的全是0,于是所在行与列都变为零,最终整个矩阵被清零。
正解:新建一个矩阵标记零元素位置 ,第二次遍历再清零。

       public static void setZeros( int [][] matrix , int m , int n ){
             boolean [] row = new boolean [ matrix . length ];
             boolean [] column = new boolean [ matrix [0]. length ];
             //标记零出现的位置
             for ( int i =0; i < m ; i ++){
                   for ( int j =0; j < n ; j ++){
                         if ( matrix [ i ][ j ]==0){
                               row [ i ]= true ;
                               column [ j ]= true ;
                        }
                  }
            }
            
             for ( int i =0; i < m ; i ++){
                   for ( int j =0; j < n ; j ++){
                         if ( row [ i ]|| column [ j ]){
                               matrix [ i ][ j ]=0;
                        }
                  }
            }
      }
}

你可能感兴趣的:(【java】程序员面试金典)