aboutsummaryrefslogtreecommitdiff
path: root/Computer_Science/leetcode/73-set_matrix_zeros.c
diff options
context:
space:
mode:
Diffstat (limited to 'Computer_Science/leetcode/73-set_matrix_zeros.c')
-rw-r--r--Computer_Science/leetcode/73-set_matrix_zeros.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/Computer_Science/leetcode/73-set_matrix_zeros.c b/Computer_Science/leetcode/73-set_matrix_zeros.c
new file mode 100644
index 0000000..31d530f
--- /dev/null
+++ b/Computer_Science/leetcode/73-set_matrix_zeros.c
@@ -0,0 +1,46 @@
+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;
+ }
+}