48. 旋转图像

2020-08-28  本文已影响0人  justonemoretry

自己解法

这种矩阵题关键还是得记住规律,这个题就是先对称反转,再前后反转,不然在不利用额外空间的情况下确实不好解。

class Solution {

    public void rotate(int[][] matrix) {

        int n = matrix.length;

        // 先对称反转

        for (int i = 0; i < n; i++) {

            for (int j = i; j < n; j++) {

                int temp = matrix[i][j];

                matrix[i][j] = matrix[j][i];

                matrix[j][i] = temp;

            }

        }

        // 再顺序反转

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < n / 2; j++) {

                int temp = matrix[i][j];

                matrix[i][j] = matrix[i][n - j - 1];

                matrix[i][n - j - 1] = temp;

            }

        }

    }

}

官方解法

将要旋转的部分分成4个矩形,分别旋转90度,前一个的列当行,列为n - 1 - 前一个的行,

确定要交换的4个点,然后用(k + 3) % 4进行4个点的交换。

class Solution {

  public void rotate(int[][] matrix) {

    int n = matrix.length;

    for (int i = 0; i < n / 2 + n % 2; i++) {

      for (int j = 0; j < n / 2; j++) {

        int[] tmp = new int[4];

        int row = i;

        int col = j;

        for (int k = 0; k < 4; k++) {

          tmp[k] = matrix[row][col];

          int x = row;

          row = col;

          col = n - 1 - x;

        }

        for (int k = 0; k < 4; k++) {

          matrix[row][col] = tmp[(k + 3) % 4];

          int x = row;

          row = col;

          col = n - 1 - x;

        }

      }

    }

  }

}

上一篇下一篇

猜你喜欢

热点阅读