LeetCode:【48. 旋轉影象】
阿新 • • 發佈:2019-01-23
題目
給定一個 n × 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; } } }