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?
模拟题
顺时针旋转90°,其实就是把第i行换到第n-i列。
例如:
1 2 3
4 5 6
7 8 9
旋转后:
7 4 1
8 5 2
9 6 3
第一行:1 2 3,旋转后成为了第三列。
对每一个元素Matrix[i][j]:
Matrix[j][n - i]
每4个元素为一组相互交换。
假设交换后为Matrx_AE
Matrix_AE[1][3] = Matrix[1][1]
Matrix_AE[3][3] = Matrix[1][3]
Matrix_AE[3][1] = Matrix[3][3]
Matrix_AE[1][1] = Matrix[3][1]
因此,我们就可以实现in-place交换。
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = matrix.size() - 1;
for (int i = 0; i < n; i++) {
for (int j = i; j < n - i; j++) {
int x = i, y = j, tx;
int prev = matrix[x][y], next;
for (int k = 0; k < 4; k++) {
next = matrix[y][n - x];
matrix[y][n - x] = prev;
tx = x;
x = y;
y = n - tx;
prev = next;
}
}
}
}
};