Cyclically Rotating a Grid LeetCode solution in Rust

1
impl Solution {
2
pub fn rotate_grid(grid: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>> {
3
let n = grid.len();
4

5
let m = grid[0].len();
6

7
let min = n.min(m) / 2;
8

9
let k = k as usize;
10

11
let mut result = grid.clone();
12

13
for pi in 0..min {
14
let mut temps = vec![];
15

16
let x = pi;
17

18
for y in pi..n - pi {
19
temps.push((y, x));
20
}
21

22
let y = n - 1 - pi;
23

24
for x in pi + 1..m - pi {
25
temps.push((y, x));
26
}
27

28
let x = m - 1 - pi;
29

30
for y in (pi..n - 1 - pi).rev() {
31
temps.push((y, x));
32
}
33

34
let y = pi;
35

36
for x in (pi + 1..m - 1 - pi).rev() {
37
temps.push((y, x));
38
}
39

40
let len = temps.len();
41

42
let ak = k % len;
43

44
for i in 0..len {
45
let (ci, cj) = temps[i];
46

47
let (ti, tj) = temps[(i + ak) % len];
48

49
result[ti][tj] = grid[ci][cj];
50
}
51
}
52

53
result
54
}
55
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0