Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- void setZeroes(vector<vector<int>>& matrix) {
- // Treat the first row and column as the flag row and flag column
- // which keeps track of which column or row to mark with zeros
- const int numRows = matrix.size();
- const int numCols = matrix[0].size();
- // The overlapping cell of column 0
- int col0 = 1;
- // Iterate over the matrix once, and mark the rows or columns
- for(int i = 0; i < numRows; i++) {
- for(int j = 0; j < numCols; j++) {
- // Not of our intereset
- if(matrix[i][j] != 0) continue;
- // Then, mark this row/column as marked
- // This is the first col of the matrix, keeping track of rows
- matrix[i][0] = 0;
- // This is the first row of the matrix, keeping track of columns
- if(j != 0)
- matrix[0][j] = 0;
- else
- col0 = 0;
- }
- }
- // Iterate over once more and mark zeros
- // Go from the other corner of the matrix
- for(int i = numRows-1; i > 0; i--) {
- for(int j = numCols-1; j > 0; j--) {
- // Either if the column flag is on, or row flag is on
- if(matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;
- }
- }
- // Check and mark the first column and row
- if(matrix[0][0] == 0) {
- for(int j = 0; j < numCols; j++) matrix[0][j] = 0;
- }
- if(col0 == 0) {
- for(int i = 0; i < numRows; i++) matrix[i][0] = 0;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement