From fa2663ec4d31abea5f3c7d72e57724e5b56e9535 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Fri, 7 Feb 2025 11:42:31 +0800 Subject: [PATCH] 20250207 finished. --- src/problem/mod.rs | 2 ++ src/problem/p59_spiral_matrix_ii.rs | 54 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/problem/p59_spiral_matrix_ii.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 1d4aa4d..b749940 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -474,3 +474,5 @@ mod p922_sort_array_by_parity_ii; mod p90_subsets_ii; mod p47_permutations_ii; + +mod p59_spiral_matrix_ii; diff --git a/src/problem/p59_spiral_matrix_ii.rs b/src/problem/p59_spiral_matrix_ii.rs new file mode 100644 index 0000000..63a2c56 --- /dev/null +++ b/src/problem/p59_spiral_matrix_ii.rs @@ -0,0 +1,54 @@ +/** + * [59] Spiral Matrix II + */ +pub struct Solution {} + +// submission codes start here + +const DIRECTIONS: [(i32, i32); 4] = [(0, 1), (1, 0), (0, -1), (-1, 0)]; + +impl Solution { + pub fn generate_matrix(n: i32) -> Vec> { + let mut result = vec![vec![0; n as usize]; n as usize]; + let (mut x, mut y) = (0, 0); + let mut pos = 0; + + for i in 1..=n.pow(2) { + result[x as usize][y as usize] = i; + + let (next_x, next_y) = (x + DIRECTIONS[pos].0, y + DIRECTIONS[pos].1); + + if next_x < 0 + || next_x >= n + || next_y < 0 + || next_y >= n + || result[next_x as usize][next_y as usize] != 0 + { + pos = (pos + 1) % 4; + x = x + DIRECTIONS[pos].0; + y = y + DIRECTIONS[pos].1; + } else { + x = next_x; + y = next_y; + } + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_59() { + assert_eq!(vec![vec![1]], Solution::generate_matrix(1)); + assert_eq!( + vec![vec![1, 2, 3], vec![8, 9, 4], vec![7, 6, 5]], + Solution::generate_matrix(3) + ); + } +}