73. Set Matrix Zeroes(js)

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.

Example 1:

Input: 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
Output: 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

Example 2:

Input: 
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
Output: 
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

题意:给定一个二维数组,数字0所在行,列都变为0,返回转化过的数组
代码如下:
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
//查找每个元素,若为0在该元素的行首和列首设为0,如果行首或者列首存在未0的元素,利用两个bool值的变量检测
//然后再遍历数组
var setZeroes = function(matrix) {
    //第一行是否有0
    var row0=false;
    //第一列是否有0
    var col0=false;
    //行数
    var rowLen=matrix.length;
    //列数
    var colLen=matrix[0].length;
    //第一行是否有为0的项
    for(var i=0;i<colLen;i++){
      if(matrix[0][i]==0){
          row0=true;
          break;
      }
    }
    //第一列是否有0的项
    for(var i=0;i<rowLen;i++){
        if(matrix[i][0]==0){
            col0=true;
            break;
        }
    }
    //检测其他项
    for(var i=1;i<rowLen;i++){
        for(var j=1;j<colLen;j++){
            if(matrix[i][j]==0){
                matrix[0][j]=matrix[i][0]=0;
            }
        }
    }
    //检测每一行首和列首是否有0
    for(var i=1;i<rowLen;i++){
        for(var j=1;j<colLen;j++){
            if(matrix[i][0]==0 || matrix[0][j]==0){
                matrix[i][j]=0;
            }
        }
    }
    //判断行首,列首本身是否有0
    if(row0){
        for(var i=0;i<colLen;i++){
            matrix[0][i]=0;
        }
    }
    if(col0){
        for(var i=0;i<rowLen;i++){
            matrix[i][0]=0;
        }
    }
};

 

posted @ 2019-03-16 23:08  mingL  阅读(123)  评论(0编辑  收藏  举报