给定一个 m x n
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
思路:使用标记数组,用两个标记数组分别记录每一行和每一列是否有零出现,具体地,我们首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。最后我们再次遍历该数组,用标记数组更新原数组即可。
class Solution { public: void setZeroes(vector<vector<int>>& matrix) { //使用标记数组,记录行数与列数 int m = matrix.size(); int n = matrix[0].size(); vector<int> row(m,0); vector<int> col(n,0); //标记数组 for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(matrix[i][j]==0){ row[i]=1; col[j]=1; } } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(row[i]==1||col[j]==1){ matrix[i][j] = 0; } } } } };
标签:matrix,标记,int,矩阵,vector,数组 From: https://www.cnblogs.com/yueshengd/p/18619952