关闭

面试题91:清除矩阵0所在行列

399人阅读 评论(0) 收藏 举报
分类:

题目:

请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。

给定一个MxN的int[][]矩阵(C++中为vector<vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]矩阵(C++中为vector<vector>),保证n小于等于300,矩阵中的元素为int范围内。

思路:

定义两个bool类型的数组,分别表示矩阵的行或列是否出现0。

第一步:扫描整个矩阵,如果检测到某个元素为0,则将该元素所在行和列对应bool数组置1。

第二步:扫描bool数组,然后将该元素对应的行或列的元素全部置为0。

实现:

class Clearer {
public:
    vector<vector<int> > clearZero(vector<vector<int> > mat, int n) {
        if(n==1) return mat;
        vector<bool> hang(n,0);
        vector<bool> lie(n,0);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(mat[i][j]==0){
                    hang[i]=1;
                    lie[j]=1;
                }
            }
        }
        for(int i=0;i<n;i++){
            if(hang[i]==1){
                for(int j=0;j<n;j++){
                    mat[i][j]=0;
                }
            }
            if(lie[i]==1){
                for(int j=0;j<n;j++){
                    mat[j][i]=0;
                }
            }
        }
        return mat;
    }
};


0
0
查看评论

遇0清除矩阵行列

请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。 给定一个N阶方阵int[][](C++中为vector)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector),保证n小于等于300,矩阵中的元素为int范围内。 测试样例: [[1,2,3],[0...
  • u014800094
  • u014800094
  • 2016-12-27 13:53
  • 117

程序员面试金典: 9.1数组与字符串 7若M*N矩阵中某个元素为0,则将其所在行与列清零

#include #include using namespace std; const int MAXSIZE = 100; int matrix[MAXSIZE][MAXSIZE]; /* 问题:编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。 分析:暴力破解的话,需要...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2016-12-20 16:31
  • 321

将矩阵中值为0的元素所在的行和列设置为0, in-place O(1)space O(mn) time

将矩阵中值为0的元素所在的行和列设置为0, in-place O(1)space O(mn) time 使用O(m+n)space 的方案比较容易想到
  • smartxxyx
  • smartxxyx
  • 2015-04-09 20:05
  • 1568

矩阵清0

分析一道水题,我也就刷刷这种题了。。。 将矩阵0元所在
  • richardzrc
  • richardzrc
  • 2014-06-17 22:47
  • 806

【矩阵】清除行列

题目描述: 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。 给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内 ...
  • u012351768
  • u012351768
  • 2016-10-13 13:10
  • 172

程序员面试金典1.7:若M*N矩阵中某个元素为0,则将其所在的行与列清零

1.7:编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。 咋一看,这个问题很简单:直接遍历整个矩阵,只要发现值为0的元素,就将其所在的行与列清零。不过这种方法有个缺陷:在读取被清零的行与列时,读到的尽是零,于是所在的行与所在的列都变成了0,很快,整个矩阵都变成了0. 避开这个缺...
  • jsqfengbao
  • jsqfengbao
  • 2015-08-29 14:25
  • 1878

《程序员面试金典》--清除二维数组中元素为0所在的行和列

题目描述: 请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。 给定一个MxN的int[][]矩阵(C++中vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]矩阵(C++中为vector),保证n小于等于300,矩阵中的元素为int范围内。 测试...
  • zdplife
  • zdplife
  • 2015-09-15 19:17
  • 793

将矩阵中0元素所对应的行列都清零

编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。 void setZeros(int **matrix, int lrow, int lcol) { bool *row = new bool[lrow]; bool *column = new bool[lc...
  • wangfengfan1
  • wangfengfan1
  • 2015-08-17 15:57
  • 647

经典算法面试题目-置矩阵行列元素为0(1.7)

题目 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0. 写一个函数处理一个MxN的矩阵,如果矩阵中某个元素为0,那么把它所在的行和列都置...
  • qq_26525215
  • qq_26525215
  • 2016-07-31 23:15
  • 5439

【Java】若MxN矩阵中某个元素为0, 则将其所在的行与列清零

若直接遍历整个矩阵,发现为零的元素就直接将所在行与列清零,这样做有一个陷阱,在读取已被清零的行或列时,读到的全是零,于是所在的行或列都变成零。 很快整个矩阵的所有元素都全部变为零了。 其实我们并不关心具体的行号和列号,反正整行和整列都会被清零,我们可以标记出零元素的行号和列号,根据这个来进行清零...
  • michellechouu
  • michellechouu
  • 2015-07-07 21:56
  • 1661
    欢迎订阅公众号:IT程序员开发
    欢迎订阅公众号:IT程序员开发
    个人资料
    • 访问:82643次
    • 积分:2892
    • 等级:
    • 排名:第14488名
    • 原创:216篇
    • 转载:4篇
    • 译文:0篇
    • 评论:27条
    最新评论