|
@@ -0,0 +1,74 @@
|
|
|
+struct Solution;
|
|
|
+
|
|
|
+impl Solution {
|
|
|
+ pub fn set_zeroes(matrix: &mut Vec<Vec<i32>>) {
|
|
|
+
|
|
|
+ let rows = matrix.len();
|
|
|
+ if rows == 0 { return }
|
|
|
+ let cols = matrix[0].len();
|
|
|
+ if cols == 0 { return }
|
|
|
+ let mut first_row = false;
|
|
|
+ let mut first_col = false;
|
|
|
+ for i in 0..rows {
|
|
|
+
|
|
|
+ for j in 0..cols {
|
|
|
+ if matrix[i][j] == 0 && i == 0 {
|
|
|
+ first_row = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if matrix[i][j] == 0 && j == 0 {
|
|
|
+ first_col = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if matrix[i][j] == 0 {
|
|
|
+ matrix[0][j] = 0;
|
|
|
+
|
|
|
+ matrix[i][0] = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for i in 1..rows {
|
|
|
+ for j in 1..cols {
|
|
|
+ if matrix[0][j] == 0 || matrix[i][0] == 0{
|
|
|
+ matrix[i][j] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if first_row {
|
|
|
+ for j in 0..cols {
|
|
|
+ matrix[0][j] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if first_col {
|
|
|
+ for i in 0..rows {
|
|
|
+ matrix[i][0] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[cfg(test)]
|
|
|
+mod tests {
|
|
|
+ use super::*;
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_set_zeros1() {
|
|
|
+ let mut matrix = vec![vec![1,1,1], vec![1,0,1], vec![1,1,1]];
|
|
|
+ Solution::set_zeroes(&mut matrix);
|
|
|
+ assert_eq!(matrix, vec![vec![1,0,1],vec![0,0,0],vec![1,0,1]]);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_set_zeros2() {
|
|
|
+ let mut matrix = vec![vec![0,1,2,0],vec![3,4,5,2],vec![1,3,1,5]];
|
|
|
+ Solution::set_zeroes(&mut matrix);
|
|
|
+ assert_eq!(matrix, vec![vec![0,0,0,0],vec![0,4,5,0],vec![0,3,1,0]]);
|
|
|
+
|
|
|
+ }
|
|
|
+}
|