48. 旋转图像 - 力扣(LeetCode) (leetcode-cn.com)
要求将一个正方形矩阵顺时针旋转90°,且要求原地操作,即直接修改,空间复杂度O(1)。
思路:先沿对角线翻转,再水平翻转一次即可。
可知:(i, j)关于对角线对称的坐标为(j, i),而关于竖直对称轴对称的坐标为(i, n - j - 1),n为边长。
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++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
//再将矩阵做水平翻转
for(int i = 0; i < n; i++) {
for(int j = 0; j < n / 2; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[i][n - j - 1];
matrix[i][n - j - 1] = tmp;
}
}
}
};