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)

相关推荐
我真会写代码几秒前
SpringBoot自动装配原理:告别繁琐配置,读懂底层逻辑
java·spring boot·mybatis
计算机安禾几秒前
【数据结构与算法】第13篇:栈(三):中缀表达式转后缀表达式及计算
c语言·开发语言·数据结构·c++·算法·链表
happymaker06264 分钟前
servlet、jsp、请求转发、重定向的一些个人理解
java·开发语言·servlet
another heaven4 分钟前
【软考 IDEF系列方法:从概念到核心差异】
数据结构
于先生吖6 分钟前
国际版答题系统 JAVA 源码实战指南
java·开发语言
gelald17 分钟前
JVM - 垃圾回收
java·jvm·后端
章鱼丸-18 分钟前
DAY40 训练与测试规范写法
人工智能·算法·机器学习
东离与糖宝20 分钟前
模式匹配支持原生类型!JDK26 switch语法极简实战
java·人工智能
代码飞天27 分钟前
算法与数据结构之又臭又长的表
数据结构·算法
workflower29 分钟前
如何使用设计模式-误区
java·开发语言·设计模式·集成测试·软件工程·需求分析·软件需求