Set Matrix Zeroes
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
size_t m = matrix.size();
size_t n = matrix[0].size();
bool firstRow = false;
bool firstCol = false;
// check first row contain 0?
for (int j = 0; j < n; j++) {
if (matrix[0][j] == 0) {
firstRow = true;
//break;
}
}
// check first col contain 0 or not
for (int i = 0; i < m; i++) {
if (matrix[i][0] == 0) {
firstCol = true;
}
}
// check from matrix[1][1]; do not overwrite first col and first row
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
// set matrix zero based on first col and first row
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
if (matrix[i][0] ==0 || matrix[0][j] ==0) {
matrix[i][j] = 0;
}
}
}
if (firstRow) {
for (int j = 0; j < n; j++) {
matrix[0][j] = 0;
}
}
if (firstCol) {
for (int i = 0; i < m; i++) {
matrix[i][0] = 0;
}
}
}
};
Bug Case
Input: [ [1,0,3] ]
Output: [ [0,0,3] ]
Except: [ [0,0,0] ]
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
size_t m = matrix.size();
size_t n = matrix[0].size();
bool firstRow = false;
bool firstCol = false;
// check first row contain 0?
for (int j = 0; j < n; j++) {
if (matrix[0][j] == 0) {
firstRow = true;
//break;
}
}
// check first col contain 0 or not
for (int i = 0; i < m; i++) {
if (matrix[i][0] == 0) {
firstCol = true;
}
}
// check from matrix[1][1]; do not overwrite first col and first row
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
// set matrix zero based on first col and first row
// better
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
if (matrix[i][0] ==0 || matrix[0][j] ==0) {
matrix[i][j] = 0;
}
}
}
//for (int j = 1; j < n; j++) {
// if (matrix[0][j] == 0) {
// for (int i = 0; i < m; i++) {
// matrix[i][j] = 0;
// }
// }
//}
//for (int i = 1; i < m; i++) {
// if (matrix[i][0] == 0) {
// for (int j = 0; j < n; j++) {
// matrix[i][j] = 0;
// }
// }
//}
// Set Row and Col wrong
if (firstRow) {
for (int i = 0; i < m; i++) {
matrix[i][0] = 0;
}
}
if (firstCol) {
for (int j = 0; j < n; j++) {
matrix[0][j] = 0;
}
}
}
};