classSolution { public: voidsetZeroes(vector<vector<int> > &matrix) { int i, j, m = matrix.size(), n = matrix[0].size(); int flagi, flagj; bool fflag = false;
for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { if (matrix[i][j] == 0) { flagi = i; flagj = j; fflag = true; break; } } if (fflag) break; } if (!fflag) // 没有一个0 return;
for (i = 0; i < m; i++) { if (matrix[i][flagj] != 0) { // if matrix[i][flagj] == 0 it means row(行)i is 0 matrix[i][flagj] = -1; } }
for (j = 0; j < n; j++) { if (matrix[flagi][j] != 0) { // if matrix[flagi][j] == 0 it means column(行)j is 0 matrix[flagi][j] = -1; } }
for (i = 0; i < m; i++) { if (i == flagi) continue; for (j = 0; j < n; j++) { if (j == flagj) continue; if (matrix[i][j] == 0) { matrix[flagi][j] = 0; // tag as column j is 0 matrix[i][flagj] = 0; // tag as row i is 0 } } } for (i = 0; i < m; i++) { if (matrix[i][flagj] == 0) { // i 行都是 0 if (i == flagi) continue; for (j = 0; j < n; j++) { if (j == flagj) continue; matrix[i][j] = 0; } } }
for (j = 0; j < n; j++) { if (matrix[flagi][j] == 0) { // 第j列都是0 if (j == flagj) continue; for (i = 0; i < m; i++) { if (i == flagi) continue; matrix[i][j] = 0; } } }