2014-09-18 220 views
0

我尝试了解这里的基本逻辑,例如,'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 
     } 
    } 
} 
+1

'N'是二次矩阵的大小。 – gaborsch 2014-09-18 20:59:43

+0

机器人与此有什么关系? – Kiloreux 2014-09-18 21:02:02

+0

是列或行的大小? – user3730244 2014-09-18 21:04:40

回答

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 

实际的旋转是使用临时变量来保存第一个e字元素。假设这一个:A -> D -> P -> M -> A

A值保存到变量top。然后M覆盖A,然后P覆盖M,然后D覆盖P,最后top值被用来重写D