美文网首页
矩阵置零

矩阵置零

作者: 小白学编程 | 来源:发表于2018-09-15 10:43 被阅读0次

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法

示例 1:

输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
</pre>

示例 2:

输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]</pre>

进阶:

  • 一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个常数空间的解决方案吗?
class Solution {
    public void setZeroes(int[][] matrix) {
        List<Integer> row=new ArrayList<>();
        List<Integer> col=new ArrayList<>();
       
        for(int i=0;i<matrix.length;++i){
            for(int j=0;j<matrix[0].length;++j){
                if(matrix[i][j]==0){
                    row.add(i);
                    col.add(j);
                    
                    System.out.println(i+""+j);
                }
            }
        }
       // System.out.println(row.length+" "+col.length);
        
        for(int i=0;i<row.size();++i){
            for(int j=0;j<matrix[0].length;++j){
                matrix[row.get(i)][j]=0;
                
            }
            for(int k=0;k<matrix.length;++k){
                matrix[k][col.get(i)]=0;
            }
            
        }
        
    }
}
class Solution {
    public void setZeroes(int[][] matrix) {
        int row=matrix.length;
        int col=matrix[0].length;
        boolean fr=false;
        boolean fc=false;
        
        for(int i=0;i<matrix.length;++i){
            for(int j=0;j<matrix[0].length;++j){
                
                if(matrix[i][j]==0){
                    if(i==0){
                        fr=true;
                    }
                    if(j==0){
                        fc=true;
                    }
                    matrix[0][j]=0;
                    matrix[i][0]=0;
                }
            }
        }
        
        for(int j=1;j<matrix[0].length;++j){
            if(matrix[0][j]==0){
                for(int i=0;i<matrix.length;++i){
                    matrix[i][j]=0;
                }
            }
        }
 
        for(int i=1;i<matrix.length;++i){
            if(matrix[i][0]==0){
                for(int j=0;j<matrix[0].length;++j){
                    matrix[i][j]=0;
                }
            }
        }
        
        if(fr){
            for(int i=0;i<matrix[0].length;++i){
                matrix[0][i]=0;
            }
        }
        
        if(fc){
            for(int j=0;j<matrix.length;++j){
                matrix[j][0]=0;
            }
        }
    }
}

相关文章

  • 矩阵置零

    矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。...

  • 矩阵置零

    题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将这个元素所在的行和列都置零。 点击查看问题跟进。 你...

  • 矩阵置零

    给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 进阶: ...

  • 矩阵置零

    给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1...

  • 矩阵置零

    矩阵置零 [https://imgtu.com/i/64W7Uf] https://leetcode-cn.com...

  • [数组]矩阵置零

    73. 矩阵置零 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0...

  • Leetcode 矩阵置零

    题目描述(中等难度) 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。...

  • 13 - Medium - 矩阵置零

    给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1...

  • 73.矩阵置零

    题目给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例...

  • 73. 矩阵置零

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

网友评论

      本文标题:矩阵置零

      本文链接:https://www.haomeiwen.com/subject/dpuzgftx.html