73. 矩阵置零

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

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]

输出:[[1,0,1],[0,0,0],[1,0,1]]

C++

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int rows=matrix.size();
        int cols=matrix[0].size();
        int first_row=0;
        int first_col=0;

        for( int i=0;i<rows;i++ ){
            if( !matrix[i][0] ){
                first_col=1;
            }
        }

        for( int i=0;i<cols;i++ ){
            if( !matrix[0][i] ){
                first_row=1;
            }
        }

        for( int i=1;i<rows;i++ ){
            for( int j=1;j<cols;j++ ){
                if( !matrix[i][j] ){
                    matrix[i][0]=matrix[0][j]=0;
                }
            }
        }

        for( int i=1;i<rows;i++ ){
            for( int j=1;j<cols;j++ ){
                if( !matrix[i][0] || !matrix[0][j] ){
                    matrix[i][j]=0;
                }
            }
        }

        if( first_col ){
            for( int i=0;i<rows;i++ ){
                matrix[i][0]=0;
            }
        }

        if( first_row ){
            for( int i=0;i<cols;i++ ){
                matrix[0][i]=0;
            }
        }
    }
};

时间复杂度

O ( M ∗ N ) O(M*N) O(M∗N)

空间复杂度

O ( M + N ) O(M+N) O(M+N)

Java

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int rows=matrix.length;
        int cols=matrix[0].length;
        int first_row=0;
        int first_col=0;

        for( int i=0;i<rows;i++ ){
            if( 0==matrix[i][0] ){
                first_col=1;
            }
        }
        for( int i=0;i<cols;i++ ){
            if(0==matrix[0][i]){
                first_row=1;
            }
        }
        for( int i=1;i<rows;i++ ){
            for( int j=1;j<cols;j++ ){
                if( 0==matrix[i][j] ){
                    matrix[i][0]=matrix[0][j]=0;
                }
            }
        }
        for( int i=1;i<rows;i++ ){
            for( int j=1;j<cols;j++ ){
                if( 0==matrix[i][0] || 0==matrix[0][j] ){
                    matrix[i][j]=0;
                }
            }
        }

        if( 1==first_col ){
            for( int i=0;i<rows;i++ ){
                matrix[i][0]=0;
            }
        }
        
        if( 1==first_row ){
            for( int i=0;i<cols;i++ ){
                matrix[0][i]=0;
            }
        }
    }
}

时间复杂度

O ( M ∗ N ) O(M*N) O(M∗N)

空间复杂度

O ( M + N ) O(M+N) O(M+N)

Python

python 复制代码
class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        rows=len(matrix);
        cols=len(matrix[0]);
        first_row=False;
        first_col=False;
        for i in range(rows):
            if not matrix[i][0]:
                first_col=True;
        
        for i in range(cols):
            if not matrix[0][i]:
                first_row=True;
        
        for i in range(1,rows):
            for j in range(1,cols):
                if not matrix[i][j]:
                    matrix[i][0]=matrix[0][j]=0;

        for i in range(1,rows):
            for j in range(1,cols):
                if not matrix[i][0] or not matrix[0][j]:
                    matrix[i][j]=0;
        
        if first_col:
            for i in range(rows):
                matrix[i][0]=0;

        if first_row:
            for i in range(cols):
                matrix[0][i]=0;

时间复杂度

O ( M ∗ N ) O(M*N) O(M∗N)

空间复杂度

O ( M + N ) O(M+N) O(M+N)

相关推荐
小熊猫写算法er16 分钟前
终极数据结构详解:从理论到实践
数据结构
Gyoku Mint20 分钟前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
纪元A梦22 分钟前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
卿着飞翔24 分钟前
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
java·rabbitmq·java-rabbitmq
陈阿土i40 分钟前
SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
java·redis·ai·springai
px不是xp1 小时前
山东大学算法设计与分析复习笔记
笔记·算法·贪心算法·动态规划·图搜索算法
安全系统学习1 小时前
【网络安全】Qt免杀样本分析
java·网络·安全·web安全·系统安全
-qOVOp-1 小时前
408第一季 - 数据结构 - 栈与队列的应用
数据结构
SoFlu软件机器人1 小时前
智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
java·开发语言·架构