Browse Source

feat: set_maxtrix_zero

Zhang Li 1 year ago
parent
commit
1bdddc1b2b
2 changed files with 75 additions and 0 deletions
  1. 1 0
      src/solutions/other/mod.rs
  2. 74 0
      src/solutions/other/set_matrix_zero.rs

+ 1 - 0
src/solutions/other/mod.rs

@@ -6,3 +6,4 @@ mod rotate_image;
 mod spiral_matrix;
 mod spiral_matrix_2;
 mod valid_number;
+mod set_matrix_zero;

+ 74 - 0
src/solutions/other/set_matrix_zero.rs

@@ -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]]);
+
+    }
+}