給定一個 n × n 的二維矩陣表示一個圖像。
將圖像順時針旋轉 90 度。
說明:
你必須在原地旋轉圖像,這意味着你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。
示例 1:
給定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋轉輸入矩陣,使其變爲:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例 2:
給定 matrix =
[
[ 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]
]
class Solution {
public void rotate(int[][] matrix) {
//首先確定兩個點 左上角 和 右下角
int leftUpRow = 0;
int leftUpCol = 0;
int rightDownRow = matrix.length - 1;
int rightDownCol = matrix[0].length - 1;
//一次旋轉一圈 就是最外圍
while (leftUpCol <= rightDownCol) {
rotate(matrix,leftUpRow++,leftUpCol++,rightDownRow--,rightDownCol--);
}
}
public void rotate(int[][] matrix,int leftUpRow,int leftUpCol,int rightDownRow,int rightDownCol) {
int temp = 0;
int times = rightDownCol - leftUpCol;
for (int i = 0; i < times; i++) {
//交換四個點
temp = matrix[leftUpRow][leftUpCol + i];
//左上角的點 = 左下角的點
matrix[leftUpRow][leftUpCol + i] = matrix[rightDownRow - i][leftUpCol];
//左下角的點 = 右下角的點
matrix[rightDownRow - i][leftUpCol] = matrix[rightDownRow][rightDownCol - i];
//右下角的點 = 右上角的點
matrix[rightDownRow][rightDownCol - i] = matrix[leftUpRow + i][rightDownCol];
//右上角的點 = 左上角的點
matrix[leftUpRow + i][rightDownCol] = temp;
}
}
}