1. 题目
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
对matrixi==0的部分,对i行、j列全部原地置为0.
2. 思路
找到第一个0的位置,将这个位置的行和列作为标记数组。
3. 代码
耗时:53ms
class Solution {public: // 遍历找到第一个0,用这个0所在的行和列作为对应行列是否有0的标记位组。 void setZeroes(vector>& matrix) { if (matrix.size() == 0) { return ; } // 计算行列为0的标签 int flag_i = -1; int flag_j = -1; for (int i = 0; i < matrix.size(); i++) { vector & line = matrix[i]; for (int j = 0; j < line.size(); j++) { if (line[j] != 0) { continue; } if (flag_i == -1) { flag_i = i; flag_j = j; break; // 标签行可以跳过了 } else { matrix[i][flag_j] = 0; matrix[flag_i][j] = 0; } } } if (flag_i == -1) { return ; } // 清理行列为0的 vector & flag_line = matrix[flag_i]; for (int i = 0; i < matrix.size(); i++) { if (i == flag_i) { continue; } vector & line = matrix[i]; for (int j = 0; j < line.size(); j++) { if (j == flag_j) { continue; } if (line[flag_j] == 0 || flag_line[j] == 0) { line[j] = 0; } } line[flag_j] = 0; // 最后清理一下标记列位 } // 清理标记行 for (int j = 0; j < flag_line.size(); j++) { flag_line[j] = 0; } return ; }};