矩阵置零

题目描述

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

    示例 1:

    矩阵置零_第1张图片

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

    示例 2:

    矩阵置零_第2张图片

    输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
    输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
    

    提示:

    • m == matrix.length
    • n == matrix[0].length
    • 1 <= m, n <= 200
    • -2^31 <= matrix[i][j] <= 2^31 - 1

    代码实现

    #include 
    
    class Solution {
    public:
        // 函数:将矩阵中包含零的行和列置为零
        void setZeroes(std::vector>& matrix) {
            int m = matrix.size();    // 获取矩阵的行数
            int n = matrix[0].size(); // 获取矩阵的列数
    
            // 创建两个标记数组,分别用于记录哪些行和列需要置零
            std::vector row(m), col(n);
    
            // 遍历矩阵,标记需要置零的行和列
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (!matrix[i][j]) { // 如果当前元素为零
                        row[i] = true;   // 标记第 i 行需要置零
                        col[j] = true;   // 标记第 j 列需要置零
                    }
                }
            }
    
            // 遍历矩阵,根据标记数组将对应的行和列置零
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (row[i] || col[j]) { // 如果第 i 行或第 j 列需要置零
                        matrix[i][j] = 0;   // 将当前元素置为零
                    }
                }
            }
        }
    };

    你可能感兴趣的:(力扣刷题,矩阵,算法,数据结构,leetcode)