void helper(int** matrix, int rowOffset, int colOffset, int rowSize, int colSize, int maxRowSize, int maxColSize) { if(rowOffset >= maxRowSize || colOffset >= maxColSize || rowOffset < 0 || colOffset < 0 || rowSize <= 0 || colSize <= 0) return; for(int i = 0; i < rowSize; i++) for(int j = 0; j < colSize; j++) if(matrix[rowOffset + i][colOffset + j] == 0) { for(int m = 0; m < colSize; m++) matrix[rowOffset + i][colOffset + m] = 0; for(int m = 0; m < rowSize; m++) matrix[rowOffset + m][colOffset + j] = 0; //left helper(matrix, rowOffset + 1, colOffset, rowSize - 1 - i, j, maxRowSize, maxColSize); //right helper(matrix, rowOffset + 1, colOffset + j + 1, rowSize - 1 - i, colSize - 1 - j, maxRowSize, maxColSize); return; } } void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) { helper(matrix, 0, 0, matrixRowSize, matrixColSize, matrixRowSize, matrixColSize); } //Flag version need to be improved void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) { int flag = INT_MIN; for(int i = 0; i < matrixRowSize; i++) for(int j = 0; j < matrixColSize; j++) { if(matrix[i][j] == 0) { for(int m = 0; m < matrixRowSize; m++) matrix[m][j] = matrix[m][j] == 0 ? 0 : flag; for(int m = 0; m < matrixColSize; m++) matrix[i][m] = matrix[i][m] == 0 ? 0 : flag; } } for(int i = 0; i < matrixRowSize; i++) for(int j = 0; j < matrixColSize; j++) { if(matrix[i][j] == flag) matrix[i][j] = 0; } }