给定一个 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;
}
}
}