我试着理解这里的基本逻辑,例如,'n'代表什么? 如果你能简单解释一下这是如何工作的,那就太好了。 这是代码:
public static void rotate(int[][] matrix, int n) {
for (int layer = 0; layer < n / 2; ++layer) {
int first = layer;
int last = n - 1 - layer;
for(int i = first; i < last; ++i) {
int offset = i - first;
int top = matrix[first][i]; // save top
// left -> top
matrix[first][i] = matrix[last-offset][first];
// bottom -> left
matrix[last-offset][first] = matrix[last][last - offset];
// right -> bottom
matrix[last][last - offset] = matrix[i][last];
// top -> right
matrix[i][last] = top; // right <- saved top
}
}
}
答案 0 :(得分:0)
算法移动元素,首先是外部元素,然后是内部元素。
取这个矩阵(n
= 4):
A B C D
E F G H
I J K L
M N O P
首先,旋转外部元素:
A -> D -> P -> M -> A
B -> H -> O -> I -> B
C -> L -> N -> E -> B
然后,你进入内循环,那里有一个位置:
F -> G -> K -> J -> F
实际旋转使用临时变量来保存第一个元素。让我们说一下:A -> D -> P -> M -> A
A
值将保存到变量top
。然后M
覆盖A
,然后P
覆盖M
,然后D
覆盖P
,最后top
值用于覆盖D
,