楼主:
yam276 ('_')
2025-05-21 17:01:4573. Set Matrix Zeroes
https://leetcode.com/problems/set-matrix-zeroes/
题意:
类似炸弹超人,
一个 m × n 矩阵,有 0 就十字方向成员都炸成 0 炸整条十字,
额外要求:不准另外宣告矩阵,要使用 in-place 空间复杂度 O(1) 的方法。
思路:
用 row[0], col[0] 来储存资讯,但这样会污染第零行列的资讯,
所以先用两个变量判断是否清除 row[0], col[0] 的成员,
并在非零行列的成员处理完之后才进行第零行列的清除。
Code:
impl Solution {
pub fn set_zeroes(matrix: &mut Vec<Vec<i32>>) {
let rows = matrix.len();
let cols = matrix[0].len();
let mut first_row_zero = false;
let mut first_col_zero = false;
for i in 0..rows {
if matrix[i][0] == 0 {
first_col_zero = true;
}
}
for j in 0..cols {
if matrix[0][j] == 0 {
first_row_zero = true;
}
}
for i in 1..rows {
for j in 1..cols {
if matrix[i][j] == 0 {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
for i in 1..rows {
for j in 1..cols {
if matrix[i][0] == 0 || matrix[0][j] == 0 {
matrix[i][j] = 0;
}
}
}
if first_col_zero {
for i in 0..rows {
matrix[i][0] = 0;
}
}
if first_row_zero {
for j in 0..cols {
matrix[0][j] = 0;
}
}
}
}