Problem

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

Example 

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

Output ::
[
[1,2,0,4],
[1,2,0,4],
[0,0,0,0],
[1,2,0,4]
]

JavaScript Code

function setZeroes(matrix) {
    var firstRowZero = false;
    var firstColumnZero = false;

    //set first row and column zero or not
    for(var i=0; i<matrix.length; i++){
        if(matrix[i][0] == 0){
            firstColumnZero = true;
            break;
        }
    }
    
    
    for(var i=0; i<matrix[0].length; i++){
        if(matrix[0][i] == 0){
            firstRowZero = true;
            break;
        }
    }

    //mark zeros on first row and column
    for(var i=1; i<matrix.length; i++){
        for(var j=1; j<matrix[0].length; j++){
            if(matrix[i][j] == 0){
               matrix[i][0] = 0;
               matrix[0][j] = 0;
            }
        }
    }
    
    //use mark to set elements
    for(var i=1; i<matrix.length; i++){
        for(var j=1; j<matrix[0].length; j++){
            if(matrix[i][0] == 0 || matrix[0][j] == 0){
               matrix[i][j] = 0;
            }
        }
    }
    
    //set first column and row
    if(firstColumnZero){
        for(var i=0; i<matrix.length; i++)
            matrix[i][0] = 0;
    }

    
    if(firstRowZero){
        for(var i=0; i<matrix[0].length; i++)
            matrix[0][i] = 0;
    }

    return matrix;
}

0 comments:

Blogroll

Popular Posts