文章目录
- 题目描述
- 题解思路
- 题解代码
- 题目链接
题目描述
题解思路
我们使用两个变量记录矩阵初始状态的第一行与第一列是否存在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/