二維網格的遷移(java實現)

花朝666發表於2020-11-03

給你一個 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> 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> lists = new ArrayList<>();
for (int[] ints : grid) { //遍歷新的陣列
List list = new ArrayList<>();
lists.add(list);
for (int anInt : ints) {
list.add(anInt);
}
}
return lists;
}

相關文章