Friday, January 10, 2014

SetMatrixZeroes LeetCode

思路: 拿矩阵的第一行第一列作为0的存储。跟新建一个长度为m,n的两个array的思路一样。
第一行和列如何判断呢,加两个变量,记录第一行第一列就好了。
注意:在扫描的时候只需要从index为1的地方可是设置为0就好了

写的无比啰嗦,不过都满足条件,一遍过的ds方法。
public void setZeroes(int[][] matrix) {
       
       boolean firstRow = false;
       boolean firstCol = false;
     
       int row = matrix.length;
       int col = matrix[0].length;
       //check the first row
       for (int j=0; j<col; j++){
           if (matrix[0][j]==0){
               firstRow=true;
               break;
           }
       }
     
       //check the first col
       for (int i=0; i<row; i++){
           if (matrix[i][0]==0){
               firstCol=true;
               break;
           }
       }
       
        //save all the results in the first col and first row
        for (int i=0; i<row; i++){
            for (int j=0; j<col; j++){
                if (matrix[i][j]==0){
                    matrix[i][0]=0;
                    matrix[0][j]=0;
                }
            }
        }
       
        //check the first row
        for (int j=1; j<col; j++){
            if (matrix[0][j]==0){
                for (int i=0; i<row; i++){
                    matrix[i][j]=0;
                }
            }
        }
       
        //check the first col
        for (int i=1; i<row; i++){
            if (matrix[i][0]==0){
                for (int j=0; j<col; j++){
                    matrix[i][j]=0;
                }
            }
        }
       
        if (firstRow){
            for (int j=0; j<col; j++){
                matrix[0][j]=0;
            }
        }
       
        if (firstCol){
            for (int i=0; i<row; i++){
                matrix[i][0]=0;
            }
        }
    }

No comments:

Post a Comment