记录矩阵变化前后各点的坐标变化,行坐标为row,列为col,矩阵为n维矩阵
可得点(row,col)=>(col,n-1-row);
即变化前的列坐标为变化后的行坐标,但得到这个规律之后,还是无从下手
这个时候考虑分步骤,先(row,col)=>(col,row)=>(col,n-1-row);
则先将矩阵以对角线为轴进行翻转,确定好变化后每个点的行坐标,然后再对列进行修正,即以每一行的中点为轴进行修正
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
//先沿对角线进行翻转,再每行以中间那列对称翻转,如下
//1 2 3 1 4 7 7 4 1
//4 5 6 => 2 5 8 => 8 5 2
//7 8 9 3 7 9 9 7 3
//沿对角线翻转
for(int i=0;i<matrix.size()-1;++i){
for(int j=i+1;j<matrix.size();++j){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
//对列坐标进行修正
for(int i=0;i<matrix.size();++i){
for(int j=0;j<matrix.size()/2;++j){
int temp = matrix[i][j];
matrix[i][j] = matrix[i][matrix.size()-1-j];
matrix[i][matrix.size()-1-j] = temp;
}
}
}
};