一、问题描述
二、问题分析
该问题是一个实际问题,对于图形学处理常常涉及到旋转,不过在数字图像图例方面,旋转是将图形矩阵乘上一个2*2的矩阵,从而达到对图片的旋转效果。在本问题中考虑到内存占用问题,考虑用其他方式,其实仔细研究可以发现图像旋转可以分解为先沿对角线对折,然后沿着中轴线对折。
三、
class Solution {
public:
//对角线对折
void Diagonal(vector<vector<int> > &matrix)
{
int size=matrix.size();
for(int i=0;i<size;i++)
{
for(int j=i;j<size;j++)
{
swap(matrix[i][j],matrix[j][i]);
}
}
}
//沿中轴线对折
void Symmetry(vector<vector<int> > &matrix)
{
int size=matrix.size();
for(int i=0;i<size;i++)
{
for(int j=0,k=size-1;j<=k;j++,k--)
swap(matrix[i][j],matrix[i][k]);
}
}
//顺时针旋转90度
void rotate(vector<vector<int> > &matrix)
{
Diagonal(matrix);
Symmetry(matrix);
}
};
代码