题目

image.png

思路

  • 规律题型,找出旋转后,下标转移了多少,通过观察我们可以发现原下标(i,j),经过旋转后会被(n - j - i, j)所占据,所以一次性我们可以找到四个交换后的下标。
  • 第二点就注意我们应该交换的次数应该是节点总数的1/4,由于奇数和偶数不一样,奇数时最中间那个点旋转后还是它自己所以我们可以不交换它。

    代码

    1. public void rotate(int[][] matrix) {
    2. int n = matrix.length;
    3. for (int i = 0; i < n / 2; i++) { //当n为奇数的时候避免了中间那个点
    4. for (int j = 0; j <= (n - 1) / 2; j++) {
    5. int t = matrix[i][j];
    6. matrix[i][j] = matrix[n - j - 1][i];
    7. matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
    8. matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
    9. matrix[j][n - i - 1] = t;
    10. }
    11. }
    12. }
    旋转图像