1. 题目
给你一个 n 行 m 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。
每次「迁移」操作将会引发下述活动:
位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。
位于 grid[i][m - 1] 的元素将会移动到 grid[i + 1][0]。
位于 grid[n - 1][m - 1] 的元素将会移动到 grid[0][0]。
请你返回 k 次迁移操作后最终得到的 二维网格。
k = 1
k = 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shift-2d-grid
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 找规律
- 可以看见,每次就是把最后一个元素挪到最开始
- 将数组转化成一维数组处理,再转回行列的坐标表示即可
class Solution {
public:vector<vector<int>> shiftGrid(vector<vector<int>>& grid, int k) {vector<vector<int>> ans(grid);int n = grid.size(), m = grid[0].size();int i, j, x, y;for(i = 0; i < n; ++i)for(j = 0; j < m; ++j){x = (m*i+j+k)/m%n;y = (m*i+j+k)%m;ans[x][y] = grid[i][j];}return ans;}
};