Open carloscn opened 1 year ago
直接按照规则编程即可,题目中已经给了详细的步骤了。简化规则就是,所有元素向右蛇形环状移动一个index。把二维数组一维化,然后移动k个就好了。
pub fn shift_grid(grid: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>>
{
if k == 0 {
return grid;
}
let len:usize = grid.len();
let r_len:usize = grid[0].len();
if len < 1 || r_len < 1 {
return vec![];
}
let mut row:Vec<i32> = vec![];
let mut ret_vec:Vec<Vec<i32>> = vec![];
// 2D VEC conversion to one-dimensional
for e in grid {
row.append(&mut e.clone());
}
// shift K len element
let mut k_shifted_vec:Vec<i32> = row.drain(row.len() - (k as usize)..row.len()).collect();
k_shifted_vec.append(&mut row);
// convert to rows
for i in 0..len {
ret_vec.push(k_shifted_vec.drain(0..r_len).collect());
}
return ret_vec;
}
问题描述
给你一个 m 行 n 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。
每次「迁移」操作将会引发下述活动:
位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。 位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0]。 位于 grid[m - 1][n - 1] 的元素将会移动到 grid[0][0]。 请你返回 k 次迁移操作后最终得到的 二维网格。
示例 1:
输入:grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1 输出:[[9,1,2],[3,4,5],[6,7,8]]
示例 2:
输入:grid = [[3,8,1,9],[19,7,2,5],[4,6,11,10],[12,0,21,13]], k = 4 输出:[[12,0,21,13],[3,8,1,9],[19,7,2,5],[4,6,11,10]]
示例 3:
输入:grid = [[1,2,3],[4,5,6],[7,8,9]], k = 9 输出:[[1,2,3],[4,5,6],[7,8,9]]
提示:
m == grid.length n == grid[i].length 1 <= m <= 50 1 <= n <= 50 -1000 <= grid[i][j] <= 1000 0 <= k <= 100
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/shift-2d-grid