🔗 https://leetcode.cn/problems/rotate-image
题目
- 给一个 n * n 的数组,返回顺时针旋转后的矩阵,要求 in-place,不能使用额外矩阵
思路
- 明确几个要交换的元素坐标,(i, j) → (j, n - i -1) → (n - i - 1, n - j - 1) → (n - j -1, i) → (i, j) 完成替换即可
- 明确要遍历的轮次,i 遍历到 n/2 即可,j 遍历 i → n - i - 1
代码
cpp
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n/2; i++) {
for (int j = i; j < n - i - 1; j++) {
int tmp = matrix[i][j];
//printf("--------- %d %d %d\n", i, j, matrix[i][j]);
matrix[i][j] = matrix[n - j - 1][i];
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
matrix[j][n - i - 1] = tmp;
}
}
}
};