跳到主要内容

1260.二维网格迁移

链接:1260.二维网格迁移
难度:Easy
标签:数组、矩阵、模拟
简介:请你返回 k 次迁移操作后最终得到的 二维网格。

题解 1 - rust

  • 编辑时间:2022-07-20
  • 执行用时:20ms
  • 内存消耗:2.3MB
  • 编程语言:rust
  • 解法介绍:对于每个下标找到对应的下一个值。
impl Solution {
pub fn shift_grid(grid: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>> {
let n = grid.len();
let m = grid[0].len();
let mut newGrid = grid.clone();
let mut i: usize = 0;
while i < n {
let mut j: usize = 0;
while j < m {
let (ni, nj) = Solution::get_next(n, m, i, j, k);
newGrid[i][j] = grid[ni][nj];
j += 1;
}
i += 1;
}
newGrid
}
fn get_next(n: usize, m: usize, i: usize, j: usize, cnt: i32) -> (usize, usize) {
if cnt == 0 {
(i, j)
} else if j != 0 {
return Solution::get_next(n, m, i, j - 1, cnt - 1);
} else if i != 0 {
return Solution::get_next(n, m, i - 1, m - 1, cnt - 1);
} else {
return Solution::get_next(n, m, n - 1, m - 1, cnt - 1);
}
}
}

题解 2 - rust

  • 编辑时间:2022-07-20
  • 执行用时:8ms
  • 内存消耗:2.3MB
  • 编程语言:rust
  • 解法介绍:对于每个下标找到对应的下一个值。
impl Solution {
pub fn shift_grid(grid: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>> {
let (n, m) = (grid.len(), grid[0].len());
let num = m * n;
let k = (k as usize) % num;
let mut ans = vec![vec![0; m]; n];
for idx in 0..num {
let next = (idx + num - k) % num;
ans[idx / m][idx % m] = grid[next / m][next % m];
}
ans
}
}