美文网首页
48. 旋转图像

48. 旋转图像

作者: justonemoretry | 来源:发表于2020-08-28 23:44 被阅读0次

    自己解法

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

    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;

            }

          }

        }

      }

    }

    相关文章

      网友评论

          本文标题:48. 旋转图像

          本文链接:https://www.haomeiwen.com/subject/njarsktx.html