首页 > 代码库 > careercup-数组和字符串1.7

careercup-数组和字符串1.7

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;    }}

 

careercup-数组和字符串1.7