LeetCode73. Set Matrix Zeroes

这题肯定要用辅助空间,因为是遇到0的则将该行该列都置为0,但是无法判断哪个是开始的0,哪个是被重置的0,导致最后整个数组都变成0。

而辅助数组为O(mn)则为最暴力的解法。

可以优化至O(m+n),即保存哪行哪列需要被置0。

那么可以被优化到空间复杂度为常数嘛。

可以的。

我们可以用第0行和第0列来记录该列是否要被变为0,另设两个boolean来记录第0行和第0列本身需不需要被变为0即可。

遍历每个元素(i,j),如果它为0,则其对应的(i,0)(0,j)都设为0。由于(i,0)(0,j)的遍历都在(i,j)之前,所以设0也不会影响结果。

class Solution {
    public void setZeroes(int[][] matrix) {
        if(matrix==null||matrix.length<1||matrix[0].length<1) return;
        
        int m=matrix.length,n=matrix[0].length;
        boolean firstRow0=false,firstCol0=false;
        for(int i=0;i<m;i++) for(int j=0;j<n;j++){
            if(matrix[i][j]==0){
                if(i==0) firstCol0=true;
                if(j==0) firstRow0=true;
                matrix[0][j]=0;
                matrix[i][0]=0;
            }
        }
        for(int i=1;i<m;i++) for(int j=1;j<n;j++){
            if(matrix[0][j]==0||matrix[i][0]==0) matrix[i][j]=0;
        }
        if(firstRow0){
            for(int i=0;i<m;i++)
                matrix[i][0]=0;
        }
        if(firstCol0){
            for(int i=0;i<n;i++){
                matrix[0][i]=0;
            }
        }
    }
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Set Matrix Zeroes.
Memory Usage: 42.1 MB, less than 86.07% of Java online submissions for Set Matrix Zeroes.
posted @ 2019-03-07 10:46  大胖子球花  阅读(89)  评论(0)    收藏  举报