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)

相关推荐
MrSYJ4 分钟前
UserDetailService是在什么环节生效的,为什么自定义之后就能被识别
java·spring boot·后端
科大饭桶1 小时前
C++入门自学Day11-- String, Vector, List 复习
c语言·开发语言·数据结构·c++·容器
long3161 小时前
构建者设计模式 Builder
java·后端·学习·设计模式
lxmyzzs1 小时前
【图像算法 - 16】庖丁解牛:基于YOLO12与OpenCV的车辆部件级实例分割实战(附完整代码)
人工智能·深度学习·opencv·算法·yolo·计算机视觉·实例分割
吐个泡泡v1 小时前
Maven 核心命令详解:compile、exec:java、package 与 IDE Reload 机制深度解析
java·ide·maven·mvn compile
天上掉下来个程小白1 小时前
微服务-01.导入黑马商城
java·微服务·架构
Noii.2 小时前
Spring Boot初级概念及自动配置原理
java·spring boot·后端
探索java2 小时前
Tomcat Server 组件原理
java·后端·tomcat
勿在浮沙筑高台2 小时前
无法获取实体类com.example.springdemo2.entity.po.UserPO对应的表名!
java·spring boot·mybatis
wow_DG2 小时前
【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
开发语言·c++·算法