文章目录
- 题目描述
- 题解思路
- 题解代码
- 题目链接
题目描述

题解思路
我们使用两个变量记录矩阵初始状态的第一行与第一列是否存在0
然后我们遍历矩阵(跳过第一行与第一列),如果矩阵中元素为0则将该元素映射到矩阵第一行与矩阵第一列的位置置为0
然后我们在遍历矩阵(跳过第一行与第一列),如果矩阵中元素映射到矩阵第一行为0或者矩阵第一列为0,则将该元素置为0
如果矩阵初始状态的第一行存在0,则将第一行都置为0
如果矩阵初始状态的第一列存在0,则将第一列都置为0
题解代码
impl Solution {
    pub fn set_zeroes(matrix: &mut Vec<Vec<i32>>) {
        let (m, n) = (matrix.len(), matrix[0].len());
        let (mut first_row_flag, mut first_col_flag) = (false, false);
        for i in 0..m {
            if matrix[i][0] == 0 {
                first_col_flag = true;
                break;
            }
        }
        for j in 0..n {
            if matrix[0][j] == 0 {
                first_row_flag = true;
                break;
            }
        }
        for i in 1..m {
            for j in 1..n {
                if matrix[i][j] == 0 {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        for i in 1..m {
            for j in 1..n {
                if matrix[i][0] == 0 || matrix[0][j] == 0 {
                    matrix[i][j] = 0;
                }
            }
        }
        if first_row_flag {
            for j in 0..n {
                matrix[0][j] = 0;
            }
        }
        if first_col_flag {
            for i in 0..m {
                matrix[i][0] = 0;
            }
        }
    }
}
题目链接
https://leetcode.cn/problems/set-matrix-zeroes/



















![[vulnhub]DC:7](https://i-blog.csdnimg.cn/direct/7b709e0062f94806b172abd4ad800ddd.png)