You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
Have you met this question in a real interview?
Yes
No
变化过程就是a(i,j)->a(j,n-i-1)->a(n-i-1,n-j-1)->a(n-j-1,i)->a(i,j),其次就是控制如何旋转,旋转的时候先旋转n*n最外层的数据,然后内层。
class Solution {
public:
void smallrotate(vector<vector<int>>& matrix, int nwei, int start)//nwei表示处理的剩nwei*nwei了,总的为数是n.
{
int temp;
int n = matrix.size();
for (int i = 0; i<nwei - 1; i++)
{
temp = matrix[i + start][start];
matrix[i + start][start] = matrix[n - 1 - start][i + start];
matrix[n - 1 - start][i + start] = matrix[n - i - 1 - start][n - 1 - start];
matrix[n - i - 1 - start][n - 1 - start] = matrix[start][n - i - 1 - start];
matrix[start][n - i - 1 - start] = temp;
}
}
void rotate(vector<vector<int>>& matrix)
{
//经旋转发现,旋转90度其实就是a(i,j)->a(j,n-i-1)->a(n-i-1,n-j-1)->a(n-j-1,i)->a(i,j)
int n = matrix.size();
int start = 0;
while (n>1)
{
smallrotate(matrix, n, start);
start++;
n = n - 2;
}
}
};