1260. Shift 2D Grid

#### QUESTION:

Given a 2D grid of size n * m and an integer k. You need to shift the grid k times.

In one shift operation:

Element at grid[i][j] becomes at grid[i][j + 1]. Element at grid[i][m - 1] becomes at grid[i + 1][0]. Element at grid[n - 1][m - 1] becomes at grid[0][0]. Return the 2D grid after applying shift operation k times.

Example 1:

Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1 Output: [[9,1,2],[3,4,5],[6,7,8]] Example 2:

Input: grid = [[3,8,1,9],[19,7,2,5],[4,6,11,10],[12,0,21,13]], k = 4 Output: [[12,0,21,13],[3,8,1,9],[19,7,2,5],[4,6,11,10]] Example 3:

Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 9 Output: [[1,2,3],[4,5,6],[7,8,9]]

Constraints:

1 <= grid.length <= 50 1 <= grid[i].length <= 50 -1000 <= grid[i][j] <= 1000 0 <= k <= 100

#### EXPLANATION:

1.首先将数组存放在链表中
2.计算开始的位置： index就为往前走k步。
|————–|————————-|
k 0 nm

m-k的位置，然后向后开始计算就行。同时需要考虑k>nm的情况
3.按照index位置，作为0开始添加，当k>n
m的时候就预设为0重新添加 4.将添加的结果添加到集合中

#### SOLUTION:

``````class Solution {
public List<List<Integer>> shiftGrid(int[][] grid, int k) {
for(int i = 0;i<grid.length;i++){
for(int j = 0;j<grid[i].length;j++){
}
}
List<List<Integer>> result = new ArrayList<>();
int index = grid.length*grid[0].length-k < 0 ? grid.length*grid[0].length - k%(grid.length*grid[0].length) :grid.length*grid[0].length-k ;
for(int i = 0;i<grid.length;i++){
List<Integer> tmp = new ArrayList<>();
for(int j = 0;j<grid[i].length;j++){
if(index==grid.length*grid[i].length) index= 0;