zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    };
    

      

  • 相关阅读:
    [USACO Mar08] 牛跑步 --k短路
    [ZJOI2008]树的统计Count
    [SDOI2010]魔法猪学院 --k短路
    POJ 2449 Remmarguts' Date -K短路
    [SCOI2007]kshort--k短路
    [HAOI2015]树上操作 -树链剖分
    HDU Aragorn's Story -树链剖分
    [USACO09JAN]安全出行Safe Travel
    2019全球区块链杭州高峰论坛将于5月17日举办!
    2019亚洲物联网安全创新国际峰会将于5月在上海开幕!
  • 原文地址:https://www.cnblogs.com/zsboy/p/3893060.html
Copyright © 2011-2022 走看看