import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param k int整型
* @return int整型二维数组
*/
public static int[][] rotateII (int n, int k) {
// write code here
int index = 1;
int[][] arr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = index;
index++;
}
}
int[][] transfer = new int[n][n];
index = 0;
while (index < k) {
//每一列向左移动
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
transfer[i][(j - 1 + n) % n] = arr[i][j];
}
}
//改变arr数组中的值,arr数组中每一列向左移动一次
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = transfer[i][j];
}
}
//每一行向上移动
for (int i = n - 1; i >= 0; i--) {
for (int j = 0; j < n; j++) {
transfer[(i - 1 + n) % n][j] = arr[i][j];
}
}
//改变arr数组中的值,arr数组中每一行向上移动一行
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = transfer[i][j];
}
}
index++;
}
return transfer;
}
}
本题考察的是数组元素的移动,所用编程语言是java。
我借助了一个辅助数组用来进行数组元素的移动,先向左移动,再向上移动。每次移动完需将辅助数组中的值赋值给原数组才能保持结果的正确

京公网安备 11010502036488号