LeetCode -- 73. Set Matrix Zeroes
//O(1) MODIFIED = INT_MIN+1; This is a trick value. class Solution { public: void setZeroes(vector<vector<int>>& matrix) { int MODIFIED = INT_MIN+1; int R = matrix.size(); int C = matrix[0].size(); for(int r=0; r<R; r++){ for(int c=0; c<C; c++){ if(matrix[r][c] == 0){ //mark all row:r col:c to MODIFIED for(int cc=0; cc<C; cc++){ //rows if(matrix[r][cc] != 0) matrix[r][cc] = MODIFIED; } for(int rr=0; rr<R; rr++){ //cols if(matrix[rr][c] != 0) matrix[rr][c] = MODIFIED; } } } } for(int r=0; r<R; r++){ for(int c=0; c<C; c++){ if(matrix[r][c] == MODIFIED) matrix[r][c] = 0; } } } }; /* vector search slow class Solution { public: void setZeroes(vector<vector<int>>& matrix) { vector<int> rows, cols; int rowlen = matrix.size(), collen= matrix[0].size(); for(int i=0; i<rowlen; i++){ for(int j=0; j<collen; j++){ if(matrix[i][j] == 0){ rows.push_back(i); cols.push_back(j); } } } for(int i=0; i<rowlen; i++){ for(int j=0; j<collen; j++){ if(rows.end()!=find(rows.begin(), rows.end(), i) || cols.end() != find(cols.begin(), cols.end(), j)) matrix[i][j] = 0; } } } }; */
class Solution { public void setZeroes(int[][] matrix) { Boolean isCol = false; int R = matrix.length; int C = matrix[0].length; for (int i = 0; i < R; i++) { // Since first cell for both first row and first column is the same i.e. matrix[0][0] // We can use an additional variable for either the first row/column. // For this solution we are using an additional variable for the first column // and using matrix[0][0] for the first row. if (matrix[i][0] == 0) { isCol = true; } for (int j = 1; j < C; j++) { // If an element is zero, we set the first element of the corresponding row and column to 0 if (matrix[i][j] == 0) { matrix[0][j] = 0; matrix[i][0] = 0; } } } // Iterate over the array once again and using the first row and first column, update the elements. for (int i = 1; i < R; i++) { for (int j = 1; j < C; j++) { if (matrix[i][0] == 0 || matrix[0][j] == 0) { matrix[i][j] = 0; } } } // See if the first row needs to be set to zero as well if (matrix[0][0] == 0) { for (int j = 0; j < C; j++) { matrix[0][j] = 0; } } // See if the first column needs to be set to zero as well if (isCol) { for (int i = 0; i < R; i++) { matrix[i][0] = 0; } } }
void setZeroes( int** matrix, int matrixSize, int* matrixColSize ) { bool setfirstRowToZero = false; bool setfirstColToZero = false; for ( int i = 0; i < matrixSize; i++ ) { for ( int j = 0; j < matrixColSize[0]; j++ ) { if ( matrix[i][j] == 0 ) { if ( i == 0 ) { setfirstRowToZero = true; } if ( j == 0 ) { setfirstColToZero = true; } matrix[i][0] = 0; matrix[0][j] = 0; } } } for ( int i = 1; i < matrixSize; i++ ) { if ( matrix[i][0] == 0 ) { for ( int j = 0; j < matrixColSize[0]; j++ ) { matrix[i][j] = 0; } } } for ( int j = 1; j < matrixColSize[0]; j++ ) { if ( matrix[0][j] == 0 ) { for ( int i = 0; i < matrixSize; i++ ) { matrix[i][j] = 0; } } } if ( setfirstColToZero == true ) { for ( int i = 1; i < matrixSize; i++ ) { matrix[i][0] = 0; } } if( setfirstRowToZero == true) { for ( int j = 1; j < matrixColSize[0]; j++ ) { matrix[0][j] = 0; } } }