問題描述
給定一個 n × n 的二維矩陣表示一個圖像。
將圖像順時針旋轉 90 度。
說明:
你必須在原地旋轉圖像,這意味着你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。
示例:
給定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋轉輸入矩陣,使其變爲:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
解題思路
每一次元素的旋轉,會造成矩陣中其他三個位置的值發生改變。
當第一行的前n-1個元素均旋轉完畢,此時矩陣的最外圈元素旋轉完成,接下來旋轉矩陣的內一圈元素,依次類推,最後圖像旋轉完成。
如圖當第一行元素都旋轉完畢,矩陣最外圈元素(綠色)旋轉完成,接下來旋轉內圈(藍色)
Java實現
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0;i<Math.floor((double)n/2);i++) {
for(int j=i;j<n-i-1;j++) {
int bak = matrix[i][j];
matrix[i][j] = matrix[n-j-1][i];
matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
matrix[j][n-i-1] = bak;
}
}
}