了解如何旋转矩阵90度
问题描述:
我尝试了解这里的基本逻辑,例如,'n'代表什么? 如果您可以简单说明这是如何工作的,那就太好了。 这里是代码:了解如何旋转矩阵90度
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
}
}
}
答
该算法移动的元素,首先外部元素,内部。
取本矩阵(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
实际的旋转是使用临时变量来保存第一个e字元素。假设这一个:A -> D -> P -> M -> A
A
值保存到变量top
。然后M
覆盖A
,然后P
覆盖M
,然后D
覆盖P
,最后top
值被用来重写D
,
'N'是二次矩阵的大小。 – gaborsch 2014-09-18 20:59:43
机器人与此有什么关系? – Kiloreux 2014-09-18 21:02:02
是列或行的大小? – user3730244 2014-09-18 21:04:40