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)

相关推荐
Highcharts.js1 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
头发还在的女程序员2 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats2 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
我命由我123453 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
拳里剑气4 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
都叫我大帅哥5 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.5 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
稚南城才子,乌衣巷风流6 小时前
支配树(Dominator Tree)详解:概念、算法与应用
算法
稚南城才子,乌衣巷风流6 小时前
动态开点:原理、实现与应用场景
数据结构·算法