73. Set Matrix Zeroes

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
对于一个矩阵,如果一个元素是0,则将其所在行,列都置为0;

思路1

使用两个数组来记录哪个行和哪个列需要被置为0;

var setZeroes = function(matrix) {
    var row = matrix.length;
    var col = matrix[0].length;
    var r = [];
    var c = [];
    for (var i = 0;i < row;i++) {
        for (var j = 0;j < col;j++) {
            if (matrix[i][j]===0) {
                r[i]=1;
                c[j]=1;
            }
        }
    }
    for (i = 0;i < row;i++) {
        if (r[i]!==1)
            continue; 
        for (j = 0;j < col;j++) {
            matrix[i][j]=0;
        }
    }
    for (i = 0;i < col;i++) {
        if (c[i]!==1)
            continue; 
        for (j = 0;j < row;j++) {
            matrix[j][i]=0;
        }
    }
};

思路2

使用每行和每列的第一个元素标记本行或本列是否需要被置为0,由于第一行和第一列的这个元素是重复的,所以单用一个变量来记录第一列的情况。
记录完后从最后一个元素开始往前更新整个矩阵

var setZeroes = function(matrix) {
    var col0 = 1, rows = matrix.length, cols = matrix[0].length;
    for (var i = 0; i < rows; i++) {
        if (matrix[i][0] === 0) col0 = 0;
        for (var j = 1; j < cols; j++)
            if (matrix[i][j] === 0)
                matrix[i][0] = matrix[0][j] = 0;
    }
    for (var i = rows - 1; i >= 0; i--) {
        for (var j = cols - 1; j >= 1; j--)
            if (matrix[i][0] === 0 || matrix[0][j] === 0)
                matrix[i][j] = 0;
        if (col0 === 0) matrix[i][0] = 0;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 扯闲篇 为啥写这个题? 因为这题由简单到难坑真是多。值得记录下来好好研究研究 题目 Given amxnmatri...
    Sonass阅读 325评论 0 0
  • Given a m x n matrix, if an element is 0, set its entire ...
    ShutLove阅读 335评论 0 0
  • 题目描述:给 m × n 的矩阵,若一个元素为0,则将其所在行列的所有元素置0,原地操作。 分析:显然重新申请一个...
    Nautilus1阅读 137评论 0 0
  • 问题描述 Given a m x n matrix, if an element is 0, set its en...
    codingXue阅读 244评论 0 0
  • 心心念念风花雪月,却一丁一点囿于鸡毛蒜皮。 总是不停会有老师来提醒,小黄老师你们班清洁区域垃圾没扫,地板没拖;小黄...
    From旮旯阅读 187评论 0 0