给你一个 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 次迁移操作后最终得到的 二维网格。
public List<List<Integer>> shiftGrid(int[][] grid, int k) {
for (int i = 0; i < k; i++) {//移动k次;
for (int i1 = 0; i1 < grid.length; i1++) { //i1代表grid的每个元素
int temp = grid[i1][grid[0].length-1];//这是每个元素里面的最后一个元素
for (int i2 = grid[0].length - 1; i2 >= 1; i2--){ //每个元素的内部的元素循环(倒续)
grid[i1][i2] = grid[i1][i2-1];//把每个元素的内部元素后移一位;
}
grid[i1][0]=temp;// 下一行的初始位置是前一行的最后一个元素
}
int temp2 = grid[grid.length-1][0];//这是该数组的最后一个元素;
for (int j = grid.length-1; j >=1; j--) {
grid[j][0] = grid[j-1][0];//把每一列的元素向下移动
}
grid[0][0]=temp2;//把最后一个元素移到第一个元素;
}
List<List<Integer>> lists = new ArrayList<>();
for (int[] ints : grid) { //遍历新的数组
List<Integer> list = new ArrayList<>();
lists.add(list);
for (int anInt : ints) {
list.add(anInt);
}
}
return lists;
}