题意
给一个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]);
}
}
};