数组与字符串5-零矩阵

零矩阵

题目:编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
数组与字符串5-零矩阵数组与字符串5-零矩阵

二 解法
思路:遍历矩阵,得到应置为0的行和列,再将对应的行和列所有元素置为0.

class Solution {
    public void setZeroes(int[][] matrix) {
        Set<Integer> column = new HashSet<>();
        Boolean tag = false;
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                if(matrix[i][j]==0){
                    column.add(j);
                    tag = true;
                }
            }
            if(tag){
                Arrays.fill(matrix[i],0);
                tag = false;
            }
        }
        for(int v:column){
            for(int i=0;i<matrix.length;i++){
                matrix[i][v]=0;
            }
        }
    }
}

数组与字符串5-零矩阵
三 优化
对于一个矩阵,若一个元素为0,将其行,列全部置为0。可以将矩阵的第一行与第一列作为标志位。
数组与字符串5-零矩阵
若黄色区域有值为0,如matrix[1][1]为0,则下图所示的区域都要标为0.
数组与字符串5-零矩阵
在编码过程中,我们可以先将matrix[1][0]与matrix[0][1]记为0,来标记第1行与第1列要全部为0.
此时矩阵变为:
数组与字符串5-零矩阵红色的0标记着第1列都要为0,蓝色的0标记着第1行都要为0.
依次遍历黄色区域的值,我们就能知道由黄色区域决定的为0的行和列。但此时,第一行和第一列的信息我们还没有处理。在上述过程中,我们更新了第一行与第一列的信息,此时第一行与第一列的信息已经乱了,因此在在进行上述过程之前,我们首先看第一行与第一列是否需要置为0.因此我们需要两个变量,row0与column0来标识第一行与第一列是否需要置为0.
数组与字符串5-零矩阵
如下图所示,第一行被蓝线所涉及的数字,标识着一列是否为0.第一列被红线涉及到的数字,标识着一行全部为0.而matrix[0][0]没有标识信息。为节约空间,我们可以取消row0,使用matrix[0][0]来标识第一行是否置为0.
数组与字符串5-零矩阵
代码:

class Solution {
    public void setZeroes(int[][] matrix) {
        Boolean coulumn = false;
        for(int i=0;i<matrix.length;i++){
            if(matrix[i][0]==0){
                coulumn = true;
            }
            for(int j=1;j<matrix[0].length;j++){
                if(matrix[i][j]==0){
                    matrix[0][j]=matrix[i][0]=0;
                }
            }
        }
        for(int i=matrix.length-1;i>=0;i--){
            for(int j = matrix[0].length-1;j>0;j--){
                if(matrix[0][j]==0||matrix[i][0]==0){
                    matrix[i][j]=0;
                }
            }
            if(coulumn){
                matrix[i][0]=0;
            }
        }
    }
}
上一篇:JZ-019-顺时针打印矩阵


下一篇:C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 大数据分页功能改进、数据权限改进