aboutsummaryrefslogtreecommitdiff
path: root/Computer_Science/leetcode/73-set_matrix_zeros.c
blob: 31d530fac5be94a73100507db7101460b1680ce0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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;
		}
}