欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 第73题 矩阵转置

程序员文章站 2022-03-15 20:33:44
...

今天和昨天和明天搬家,可能不太有时间,今天抽空写道题。

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

主要要求是原地转置,所以比较难一点。

class Solution {
    public void setZeroes(int[][] matrix) {
        if(matrix.length == 0){
            return ;
        }
        int m = matrix.length ;
        int n = matrix[0].length ;
        boolean row0 = false ;
        boolean col0 = false ; 

        for(int i = 0 ; i < m ; i ++){//把带0的每行每列的行首列首置为0
            for(int j = 0 ; j < n ; j ++){
                if(matrix[i][j]==0){
                    if(i == 0) col0 = true ;//如果第一行某个数字为0,会被掩盖掉,所以提前记录一下,首行是否有0,如果有,后面把整行设为0
                    if(j == 0) row0 = true ;//所以设置了这两个参数
                    matrix[0][j] = 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(col0 == true){
            for(int i = 0 ; i < n ; i ++){
                matrix[0][i] = 0 ;
            }
        }

        if(row0 == true){
            for(int j = 0 ; j < m ; j++){
                matrix[j][0] = 0 ;
            }
        }

    }
}

一个关键的问题就是,首行和首列的问题,要提前设置好 col0和row0,如果有0,就把它们设为0