1. 程式人生 > >LeetCode:【48. 旋轉影象】

LeetCode:【48. 旋轉影象】

題目

給定一個 × n 的二維矩陣表示一個影象。

將影象旋轉 90 度(順時針)。

注意:

你必須在原矩陣中旋轉影象,請不要使用另一個矩陣來旋轉影象。

例 1:

給出的輸入矩陣 = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

旋轉輸入矩陣,使其變為 :
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

例 2:

給出的輸入矩陣 =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

旋轉輸入矩陣,使其變為 :
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

解題思路

     其實如果我們現在假設有一個N*N的陣列,我們可以將其想象為N個正方形,每個正方形的邊長分別為N,N-1,N-2...2,1。每一次的旋轉,其實都是正方形上的四個元素之間的相互替換。所以本質上我們只需遍歷每種長度正方形上的一條邊,就可以完成這個正方形的旋轉。最後實現整個陣列矩陣的旋轉。

程式碼實現

public void rotate(int[][] matrix) {
         int length = matrix.length;
        //i代表正方形的起始位置,i=0即(0,0),i=1即(1,1)
        for(int i = 0 ; i < length/2 ; i++){
            //j代表當前正方形上的一條邊上的一個點。
            for(int j = i ; j<length-i-1 ; j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[length-j-1][i];
                matrix[length-j-1][i] = matrix[length-i-1][length-j-1];
                matrix[length-i-1][length-j-1] = matrix[j][length-i-1];
                matrix[j][length-i-1] = temp;
            }
        }
        
    }