Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
给定一个mXn的矩阵,如果其中的元素为0,则对应的行和列都用0填充。
第一行和第一列空出来标记需要置0的列和行
第一行清零(根据一开始的判断看是否清零)
第一列清零(根据一开始的判断看是否清零)
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
int rows=matrix.size();
if(rows==0)return;
int cols=matrix[0].size();
if(cols==0)return;
bool isR1Removed=false;
bool isC1Removed=false;
// 判断第1行是否需要清零
for(int j=0; j<cols; j++){
if(matrix[0][j]==0){isR1Removed=true;break;}
}
// 判断第1列是否需要清零
for(int i=0; i<rows; i++){
if(matrix[i][0]==0){isC1Removed=true;break;}
}
//扫描除第一行第一列之外的区域,并在第一行和第一列做相应的清零标记
for(int i=1; i<rows; i++){
for(int j=1; j<cols; j++){
if(matrix[i][j]==0){
matrix[0][j]=0;
matrix[i][0]=0;
}
}
}
//扫描第一行,相应列清零
for(int j=1; j<cols; j++){
if(matrix[0][j]==0){
for(int i=1; i<rows; i++){
matrix[i][j]=0;
}
}
}
//扫描第一列,相应行清零
for(int i=1; i<rows; i++){
if(matrix[i][0]==0){
for(int j=1; j<cols; j++){
matrix[i][j]=0;
}
}
}
if(isR1Removed){
//第一行清0
for(int j=0; j<cols; j++) matrix[0][j]=0;
}
if(isC1Removed){
//第一列清0
for(int i=0; i<rows; i++) matrix[i][0]=0;
}
}
};LeetCode: Set Matrix Zeroes [073],布布扣,bubuko.com
LeetCode: Set Matrix Zeroes [073]
原文地址:http://blog.csdn.net/harryhuang1990/article/details/27351537