题目:
知识点:
二维数组的行数求法:array.length
二维数组列数求法:array[0].length
思路:
创建一个新的二维数组,将移动好的数组放到新创建的数组中,然后再把新的数组赋值给原来的数组,从而达到迁移的目的。
迁移中有三种情况:1.在同一行中迁移
2.前一行的最后一个元素迁移到下一行的第一个元素
3.二维数组的最后一个元素迁移到二维数组的同一个元素
代码:
class Solution {
public List<List<Integer>> shiftGrid(int[][] grid, int k) {
while(k > 0){
int[][] newGrid = new int[grid.length][grid[0].length];
//1.同一行移动的情况
for (int i = 0;i < grid.length;i++){
for (int j =0;j < grid[0].length-1;j++){
newGrid[i][j+1] = grid[i][j];
}
}
//2.前n-1行,最后面一列需要移动下一行的第一个元素
for (int i = 0;i < grid.length-1;i++){
newGrid[i+1][0] = grid[i][grid[0].length-1];
}
//3.最后一行,最后一列元素移动到第一行第一个元素
newGrid[0][0] = grid[grid.length-1][grid[0].length-1];
grid = newGrid;//将移动好的数据放回原来的二维网格
k--;
}
//打印
List<List<Integer>> result = new ArrayList<>();
for (int[] row : grid) {
List<Integer> listRow = new ArrayList<>();
result.add(listRow);
for (int v : row) listRow.add(v);
}
return result;
}
}