Java 题解 | #向左移动牛群II#
向左移动牛群II
https://www.nowcoder.com/practice/2467ddd80a2942abbaa752f3c874dd79
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param k int整型
* @return int整型二维数组
*/
public int[][] rotateII (int n, int k) {
// write code here
int[][] pp = new int[n][n];
int[] p = new int[n];
for (int i = 0, cnt = 0; i < n; i++) {
p[i] = n;
pp[i] = new int[n];
for (int j = 0; j < n; j++)
pp[i][j] = ++cnt;
}
int num = k % n;
if (num == 0) {
return pp;
}
for (int kk = 0; kk < num; kk++) {
for (int i = 0; i < n; i++) {
int tmp = pp[i][0];
for (int j = 0; j < n - 1; j++)
pp[i][j] = pp[i][j + 1];
pp[i][n - 1] = tmp;
}
for (int i = 0; i < n; i++) {
int tmp = pp[0][i];
for (int j = 0; j < n - 1; j++)
pp[j][i] = pp[j + 1][i];
pp[n - 1][i] = tmp;
}
}
return pp;
}
}
该代码使用的编程语言Java。
该题考察的知识点是数组的旋转和二维数组的操作。题目要求将一个n x n的二维数组顺时针旋转k次,并返回旋转后的结果。
具体代码解释如下:
- 使用嵌套循环初始化二维数组pp。外层循环遍历行,内层循环遍历列。同时,使用一个计数器cnt来记录当前要填充的值,每次填充之后cnt增加1。
- 计算旋转次数num,即k除以n取余数。如果num为0,则表示没有旋转操作,直接返回原始的二维数组pp。
- 如果num不为0,则进行旋转操作。外层循环控制旋转的次数,内层循环分别旋转行和列。
- 行旋转:首先将每一行的第一个元素保存到临时变量tmp中,然后将该行的每个元素向左移动一个位置,最后将临时变量tmp放置在该行的最后一个位置。
- 列旋转:首先将每一列的第一个元素保存到临时变量tmp中,然后将该列的每个元素向上移动一个位置,最后将临时变量tmp放置在该列的最后一个位置。
- 循环结束后,将结果返回。将n赋值给returnSize,p赋值给returnColumnSizes,并返回二维数组pp。

360集团公司福利 411人发布