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;

    }

}

 

你可能感兴趣的:(字符串)