LeetCode - Set Matrix Zeroes

来源:互联网 发布:鬼宿舍知乎 编辑:程序博客网 时间:2024/05/29 18:12

https://leetcode.com/problems/set-matrix-zeroes/


因为要求用constant extra space,所以用矩阵第一行和列存储剩余行列是非该设为0,注意,如果第一行第一列含0的话,说明第一行或列,以及对应的列或行应该设0,所以这一位置标志位就已经是0了,因此第一行列的值不会影响后面扫描的结果,但是第一行列本身的值会被标志位覆盖掉。


另外的方法就是使用两个新的数组,分别记录行标志和列标志,这样第一行列的值就不会被覆盖了,但是这样空间复杂度是O(m+n)

第一种方法代码如下:

    public void setZeroes(int[][] matrix) {        int m = matrix.length;        int n = matrix[0].length;        boolean frow0 = false;        boolean fcol0 = false;        for(int i=0; i<n; i++){            if(matrix[0][i]==0){                frow0 = true;                break;            }        }                for(int j=0; j<m; j++){            if(matrix[j][0]==0){                fcol0 = true;                break;            }        }                for(int i=1; i<m; i++){            for(int j=1; j<n; j++){                if(matrix[i][j]==0){                    matrix[i][0] = 0;                    matrix[0][j] = 0;                }            }        }        for(int i=1; i<m; i++){            for(int j=1; j<n; j++){                if(matrix[i][0] == 0 || matrix[0][j] == 0){                    matrix[i][j]=0;                }            }        }        if(frow0==true){            for(int i=0; i<n; i++){                matrix[0][i]=0;            }        }        if(fcol0==true){            for(int i=0; i<m; i++){                matrix[i][0]=0;            }        }            }


0 0