leetcode 48. 旋转图像
题目如下
观察交换规律我们可以看到,第一行第一个转移到的的最后一列的第一个。
即f(r,c) 转移到f(c,n - r - 1)
我们可以把r c赋值成(c,n - r - 1)可以发现一个位置走一圈总共有四个式子。
我们可以把第一个位置用t暂存随后逆推公式把后面的轮换上来。
temp = 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] = temp;
通过代码
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
int temp;
for (int i = 0; i < n / 2; ++i) {
for (int j = 0; j < (n + 1) / 2; ++j) {
temp = 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] = temp;
}
}
}
};