题目
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?
分析
题目要求不能申请多余的空间
而且是顺时针旋转,不是逆时针
把矩阵的旋转分成n/2层进行
首先是最外层的一圈数据,其次是次外层的数据。
分为上下左右四列,上列调整到右列,右列调整到下列,下列调整到左列,左列调整到上列,依次进行。设置一个中间值即可。
数组的操作需要想清楚,最好拿一个数组中的某个值进行推算,不然很容易蒙圈。
实现
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if (matrix.size() == 0)
return;
int size = matrix.size();
int iter = size / 2;
//共需要Iter 次调整
for (int i = 0; i < iter; i++)
{
int tmp = 0;
//每次需要调整的数据
for (int j = i; j < size - i - 1; j++)
{
tmp = matrix[i][j];
matrix[i][j] = matrix[size - 1 - j][i];
matrix[size - 1 - j][i] = matrix[size - i - 1][size - j - 1];
matrix[size - i - 1][size - j - 1] = matrix[j][size - i - 1];
matrix[j][size - i - 1] = tmp;
//matrix[i][i] = matrix[j][size-i-1];
//matrix[j][size - i - 1] = matrix[size - i - 1][size - j - 1];
//matrix[size - i - 1][size - j - 1] = matrix[size-1-j][i];
//matrix[size - j - 1][i] = tmp;
}
}
}
};