题意
给一个n x n的矩阵,顺时针90°旋转该矩阵。
要求:O(1)空间
思路
先画一个图看一下转化关系:
那么,我们只需要从A(i,j)转换到A(j,n−1−i)即可。可以通过2步旋转。
- A(i,j)到A(j,i):以对角线为对称线旋转即可。
- A(j,i)到A(j,n−1−i):以最中间的一列为对称中心旋转即可。
演示:
代码
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++)
swap(matrix[i][j], matrix[j][i]);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n / 2; j++)
swap(matrix[i][j], matrix[i][n - 1 - j]);
}
}
};