给你一幅由
N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外
内存空间能否做到?
思路:用翻转代替旋转
1 找到水平中间轴数组上下交换
2 沿主对角线进行翻转
原理: matrix[row][col]水平轴翻转=>matrix[n−row−1][col]
matrix[row][col]主对角线翻转=>matrix[col][row]
=> matrix[row][col]水平轴翻转=>matrix[n−row−1][col]
主对角线翻转=>matrix[col][n−row−1]
matrixnew[col][n−row−1]=matrix[row][col]
力扣官网解答:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
// 水平翻转
for (int i = 0; i < n / 2; ++i) {
for (int j = 0; j < n; ++j) {
swap(matrix[i][j], matrix[n - i - 1][j]);
}
}
// 主对角线翻转
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
}
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/rotate-matrix-lcci/solution/xuan-zhuan-ju-zhen-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。