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
    }
}