题目
大致思路
直接修改旋转之后的矩阵:也就是说,直接计算旋转后的位置即可,分析如下:
-
原始矩阵
1 2 3 4 5 6 7 8 9
-
调换对角元素后的矩阵:对角元素的规律是:00-22,01-12,10-21,中间两个数字和外面两个数字加起来相等,等于矩阵的长度-1。
9 6 3 8 5 2 7 4 1
-
调换第一行与最后一行,即可得到目标矩阵:00-20,01-21,02-22,行索引之和为长度-1.
7 4 1 8 5 2 9 6 3
代码实现
class Solution {
public void rotate(int[][] matrix) {
//调换反对角线对称的对角元素
for(int i = 0;i<matrix.length;i++){
for(int j = 0;j<matrix.length-i;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[matrix.length-j-1][matrix.length-i-1];
matrix[matrix.length-j-1][matrix.length-i-1] = temp;
}
}
//将行序完全颠倒
for(int i = 0;i<matrix.length;i++){
for(int j = 0;j<matrix.length/2;j++){
int temp = matrix[j][i];
matrix[j][i] = matrix[matrix.length-1-j][i];
matrix[matrix.length-1-j][i] = temp;
}
}
}
}