NC352. 矩阵置零
描述
给定一个 的矩阵matrix如果矩阵中任一元素是 0 ,则将其所在行列都设为 0,请你在matrix本身修改,即原地修改 。示例1
输入:
[[1,1,1],[1,0,1],[1,1,1]]
输出:
[[1,0,1],[0,0,0],[1,0,1]]
示例2
输入:
[[0,1,0],[1,1,1],[1,1,1],[1,1,1]]
输出:
[[0,0,0],[0,1,0],[0,1,0],[0,1,0]]
C++ 解法, 执行用时: 400ms, 内存消耗: 34028KB, 提交时间: 2022-06-18
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> */ void setZeroMatrix(vector<vector<int> >& matrix) { // write code here vector<bool> row(matrix.size(),false); vector<bool> col(matrix[0].size(),false); for(int i=0;i<matrix.size();i++) for(int j=0;j<matrix[0].size();j++) if(matrix[i][j]==0){ row[i]=true;col[j]=true; } for(int i=0;i<row.size();i++) if(row[i]){ for(int j=0;j<col.size();j++) matrix[i][j]=0; } for(int j=0;j<col.size();j++) if(col[j]){ for(int i=0;i<row.size();i++) matrix[i][j]=0; } } };
C++ 解法, 执行用时: 401ms, 内存消耗: 34128KB, 提交时间: 2022-07-02
class Solution { public: void setZeroMatrix(vector<vector<int> >& matrix) { vector<bool> x(matrix.size(), false); vector<bool> y(matrix[0].size(), false); for (int i = 0; i < matrix.size(); i++) for (int j = 0; j < matrix[0].size(); j++) if (matrix[i][j] == 0) { x[i] = true; y[j] = true; } for (int i = 0; i < x.size(); i++) if (x[i]) { for (int j = 0; j < y.size(); j++) matrix[i][j] = 0; } for (int j = 0; j < y.size(); j++) if (y[j]) { for (int i = 0; i < x.size(); i++) matrix[i][j] = 0; } } };
C++ 解法, 执行用时: 404ms, 内存消耗: 34128KB, 提交时间: 2022-05-21
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> */ void setZeroMatrix(vector<vector<int> >& w) { int n = w.size(), m = w[0].size(); vector<bool> x(n), y(m); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (w[i][j] == 0) x[i] = y[j] = 1; } } for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (x[i] || y[j]) w[i][j] = 0; } } } };
C++ 解法, 执行用时: 404ms, 内存消耗: 34128KB, 提交时间: 2022-03-10
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> */ void setZeroMatrix(vector<vector<int> >& matrix) { int i,j,m=matrix.size(),n=matrix[0].size(); bool isfirst=false; for(i=0;i<m;i++) { isfirst=isfirst||(matrix[i][0]==TARGET); for(j=1;j<n;j++) { if(matrix[i][j]==TARGET) matrix[i][0]=matrix[0][j]=TARGET; } } for(i=m-1;i>=0;i--) { for(j=1;j<n;j++) { if((matrix[i][0]==TARGET)||(matrix[0][j]==TARGET)) matrix[i][j]=TARGET; } if(isfirst) matrix[i][0]=TARGET; } } private: const int TARGET=0; };
C++ 解法, 执行用时: 407ms, 内存消耗: 34128KB, 提交时间: 2022-03-10
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> */ void setZeroMatrix(vector<vector<int> >& matrix) { // write code here int m = matrix.size(); int n = matrix[0].size(); int flag_col0 = false; for (int i = 0; i < m; i++) { if (!matrix[i][0]) { flag_col0 = true; } for (int j = 1; j < n; j++) { if (!matrix[i][j]) { matrix[i][0] = matrix[0][j] = 0; } } } for (int i = m - 1; i >= 0; i--) { for (int j = 1; j < n; j++) { if (!matrix[i][0] || !matrix[0][j]) { matrix[i][j] = 0; } } if (flag_col0) { matrix[i][0] = 0; } } } };