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)

相关推荐
lhrimperial3 分钟前
企业智能知识库助手落地实践:从RAG到Multi-Agent
java·spring cloud·微服务·系统架构·知识图谱
Rui_Freely4 分钟前
Vins-Fusion之 SFM准备篇(十二)
人工智能·算法·计算机视觉
3***68848 分钟前
Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
java·spring boot·后端
-森屿安年-12 分钟前
unordered_map 和 unordered_set 的实现
数据结构·c++·散列表
C***u17612 分钟前
Spring Boot问题总结
java·spring boot·后端
yyy(十一月限定版)22 分钟前
matlab矩阵的操作
算法·matlab·矩阵
Elieal26 分钟前
5 种方式快速创建 SpringBoot 项目
java·spring boot·后端
better_liang35 分钟前
每日Java面试场景题知识点之-Java修饰符
java·访问控制·static·abstract·final·修饰符·企业级开发
努力学算法的蒟蒻39 分钟前
day58(1.9)——leetcode面试经典150
算法·leetcode·面试
rgeshfgreh1 小时前
Spring事务传播机制深度解析
java·前端·数据库