1.7 编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。
类似于leetcode中的 Set Matrix Zeroes
C++实现代码:
#include<iostream> #include<vector> using namespace std; void setMatricZero(vector<vector<int> > &matrix) { if(matrix.empty()||matrix[0].empty()) return; int i,j; int m=matrix.size(); int n=matrix[0].size(); int rflag=0; int cflag=0; for(i=0; i<m; i++) if(matrix[i][0]==0) rflag=1; for(j=0; j<n; j++) if(matrix[0][j]==0) cflag=1; for(i=1; i<m; i++) for(j=1; j<n; j++) if(matrix[i][j]==0) { matrix[i][0]=0; matrix[0][j]=0; } for(i=1; i<m; i++) for(j=1; j<n; j++) { if(matrix[i][0]==0||matrix[0][j]==0) matrix[i][j]=0; } if(rflag) { for(i=0; i<m; i++) matrix[i][0]=0; } if(cflag) { for(j=0; j<n; j++) matrix[0][j]=0; } } int main() { vector<vector<int> > matrix= { {0,12,13,14}, {15,16,17,18}, {19,0,21,22}, {23,24,25,26} }; setMatricZero(matrix); for(auto a:matrix) { for(auto t:a) cout<<t<<" "; cout<<endl; } }