前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Set Matrix Zeroes

Set Matrix Zeroes

作者头像
用户1624346
发布2018-04-17 16:56:57
6270
发布2018-04-17 16:56:57
举报
文章被收录于专栏:calmoundcalmound

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

代码语言:javascript
复制
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列是否清零

代码语言:javascript
复制
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;
        }
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-08-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档