题目描述:
给定一个n*n的二维矩阵表示一个图像。将图像顺时针旋转90度。
题目解析:
本题由于不允许采用额外的数组来进行辅助计算,于是,我们可以采用特殊解法:整个矩阵旋转90度,即意味着采用洋葱旋转法,每一层中的每一个数都进行相应的旋转即可。
具体代码如下:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int len = matrix.size(); //求出矩阵的行数
for(int i=0;i<len/2;i++) //表示外层循环
{
for(int j=i,k=i;j<len-1-i;j++) //表示中层循环
{
int pre=matrix[j][k]; //记录下当前的数字,用pre进行保存
for(int cnt=1;cnt<=4;cnt++) //进行四次旋转
{
int tmp=j; //设置中间交换变量tmp
j=k; //横坐标=纵坐标
k=len-1-tmp; //纵坐标等于总长度-1-初始横坐标
swap(pre,matrix[j][k]); //进行位置交换
}
}
}
}
};