LeetCode——面试题01.07 旋转矩阵_迭代


题解

  • 假设一个LeetCode——面试题01.07 旋转矩阵_迭代_02的矩阵,顺时针旋转后,对于LeetCode——面试题01.07 旋转矩阵_顺时针_03
  • 毋庸置疑,对于任何一个位置,旋转4次,回到原来的位置。那么换个思路,也就是说,对于任何一个位置,可以把矩阵分为四个象限,每个象限的点都向顺时针迭代。
  • LeetCode——面试题01.07 旋转矩阵_顺时针_04LeetCode——面试题01.07 旋转矩阵_顺时针_05
    LeetCode——面试题01.07 旋转矩阵_顺时针_05LeetCode——面试题01.07 旋转矩阵_顺时针_07
    LeetCode——面试题01.07 旋转矩阵_顺时针_08LeetCode——面试题01.07 旋转矩阵_顺时针_09
    LeetCode——面试题01.07 旋转矩阵_顺时针_09LeetCode——面试题01.07 旋转矩阵_顺时针_04
  • 这里画个图就很好理解
  • 注意当n为奇数的时候,为了不重不漏,对于x、y两个轴的方向:一个方向取LeetCode——面试题01.07 旋转矩阵_迭代_12,另一个方向取LeetCode——面试题01.07 旋转矩阵_迭代_13

AC-Code

class Solution {
public:
void rotate(vector<vector<int>>& matrix) { // 双百code
int n = matrix.size();
for(int i = 0; i < (n) / 2; ++i) {
for(int j = 0; j < (n+1) / 2; ++j) {
int tmp = 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;
}
}
}
};