Set Matrix Zeroes

问题:将数组中的某个值为0的元素所在行和列的其他值都为0
分析;遍历数组找到某一值为0然后遍历他的上下左右直到边界,要用while而不能用搜索,因为搜索过去新节点的操作以旧结点一样的操作
         要用一个新数组,不然原数组修改后会影响到下次的查找

class Solution {

public:

    void setZeroes(vector<vector<int> > &matrix) {

        int i,j;

        int num[330][330];

        for(i=0;i<matrix.size();i++)

        {

            for(j=0;j<matrix[0].size();j++)

            {

                num[i][j]=matrix[i][j];

            }

        }

        for(i=0;i<matrix.size();i++)

        {

            for(j=0;j<matrix[0].size();j++)

            {

                if(num[i][j]==0)

                {

                    int x,y;

                    x=i,y=j;

                    while(x>=0) matrix[x--][y]=0;

                    x=i,y=j;

                    while(x<matrix.size()) matrix[x++][y]=0;

                    x=i,y=j;

                    while(y>=0) matrix[x][y--]=0;

                    x=i,y=j;

                    while(y<matrix[0].size()) matrix[x][y++]=0;

                }

            }

        }

    }

};

法二:
1:首先编辑出0行是否要清零,0列是否要清零
2:遍历数组,若某个matrix[i,j]是:0,则将matrix[0,j]和matrix[i,0]为0
3:遍历数组,判断matrix[0,j]==0 || matrix[i,0]==0 若是则matrix[i,j]=0
4:  根据步骤1决定0行0列是否清零

class Solution {

public:

    void setZeroes(vector<vector<int> > &matrix) {

        int i,j;

        int row=0,col=0;

        //预判出来就是为了防止后面那个修改的错误,要把0行0列排出去

        for(i=0;i<matrix.size();i++)

        {

            if(matrix[i][0]==0) 

            {

                col=1;

                break;

            }

        }

        for(i=0;i<matrix[0].size();i++)

        {

            if(matrix[0][i]==0)

            {

                row=1;

                break;

            }

        }

        for(i=0;i<matrix.size();i++)

        {

            for(j=0;j<matrix[0].size();j++)

            {

                if(matrix[i][j]==0)

                {

                    matrix[0][j]=matrix[i][0]=0;

                }

            }

        }

        //这里必须是1,若为0的话,如果matrix[0,0]为0的话,则0行0列全为0了,则真个matrix数组都为0了

        for(i=1;i<matrix.size();i++)

        {

            for(j=1;j<matrix[0].size();j++)

            {

                if(matrix[i][0]==0 || matrix[0][j]==0) matrix[i][j]=0;

            }

        }

        if(row)

        {

            for(i=0;i<matrix[0].size();i++)

                matrix[0][i]=0;

        }

        if(col)

        {

            for(i=0;i<matrix.size();i++)

                matrix[i][0]=0;

        }

    }

};

  

你可能感兴趣的:(Matrix)