2014-09-18 266 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