Type:medium
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.
Example 1:
Input:[ [1,1,1], [1,0,1], [1,1,1]]Output:[ [1,0,1], [0,0,0], [1,0,1]]
给定一个矩阵,若某个值为0,则将该值所在的横排、竖列所有值均赋为0。
本题要求空间复杂度尽量小,因此不考虑再建一个矩阵的问题。建两个大小分别为矩阵行数、列数的数组,用来保存每一行、每一列是否有0值,若有,则该行、该列所有值赋为0。
void setZeroes(vector<vector<int>>& matrix) {
if(matrix.empty() || matrix[0].empty()) return;
int m = matrix.size();
int n = matrix[0].size();
vector<int> row(m, 1);
vector<int> col(n, 1);
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(matrix[i][j] == 0){
row[i] = 0;
col[j] = 0;
}
}
}
for(int i=0; i<m; i++){
if(row[i] == 0){
for(int j=0; j<n; j++) matrix[i][j] = 0;
}
}
for(int i=0; i<n; i++){
if(col[i] == 0){
for(int j=0; j<m; j++) matrix[j][i] = 0;
}
}
return;
}