核心思想:推导规律…
偶数情况:
奇数情况:
图片来源于LeetCode官方题解。
class Solution {
public void rotate(int[][] matrix) {
int len = matrix.length;
//无需每一行都需要进行旋转,只要上半矩阵进行旋转即可(偶数不影响,奇数中间块不用移动)
for (int i = 0; i < len / 2; i++) {
//保证偶数一半,奇数比一半多一个
//目的:每次旋转的一行不可以全部旋转,不然会影响第二行的旋转
for (int j = 0; j < (len + 1) / 2; ++j) {
//这个是从逆时针思考这个问题的,也就是谁被谁占据了,而不是顺时针思考谁要占据谁(这个推导好像不能成功,存在问题)
//在推导过程中,注意必有一个行对应着一个列他们是不变量
int temp = matrix[i][j];
matrix[i][j] = matrix[len - j - 1][i];
matrix[len - j - 1][i] = matrix[len - i - 1][len - j - 1];
matrix[len - i - 1][len - j - 1] = matrix[j][len - i - 1];
matrix[j][len - i - 1] = temp;
}
}
}
}
其实有个思考起来较为简单的方法:先变成转置矩阵,然后左右镜像对调一下即可。np!!!!