侧边栏壁纸
博主头像
StarStone 博主等级

长风破浪会有时,直挂云帆济沧海

  • 累计撰写 31 篇文章
  • 累计创建 16 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Leetcode 48.旋转图像

StarStone
2024-02-04 / 0 评论 / 0 点赞 / 178 阅读 / 0 字

48.旋转图像

48.旋转图像

  • 标签:数组、数学、矩阵

  • 难度:中等

描述:给定一个 n×n 大小的二维矩阵(代表图像)matrix

要求:将二维矩阵 matrix 顺时针旋转 90°。

说明:

  • 不能使用额外的数组空间。

  • n==matrix.length==matrix[i].length

  • 1≤n≤20。

  • −1000≤ matrix[i][j] ≤1000。

示例:

  • 示例1

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

2024-02-04T14:50:46.021809112-hievttia.jpg

  • 示例2

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

2024-02-04T14:50:46.024152682-ifutxqkq.jpg

思路

以示例2为例,经过观察,矩阵的第1行旋转90度变成了倒数第1列,第2行旋转90度变为倒数第2列。所以,可以得出一般性结论:位置第 i 行、第 j 列的元素经过90度旋转,到了第 j 行、第 n - i - 1 列的位置上。

即 matrix[j][n - i - 1] = matrix[i][j].

原先第 j 行、第 n - i - 1 列的位置的元素经过旋转也移动到新位置上,带入一般性结论得出:

matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]. 即原先第 j 行、第 n - i - 1 列的元素旋转后到了第 n - i - 1 行、第 n - j - 1 列的位置上。

类似地,原先(n - i - 1, n - j - 1)位置上元素旋转后,存在:

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

原先(n - i - 1, n - j - 1)位置上元素旋转后,存在:

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

所以旋转90度,就有如下的关系式,箭头左边表示原先位置,右边表示经过旋转90度后的位置。

2024-02-04T14:50:46.026796589-zqjocrvc.png

以上写的是关于如何选择,还有1个重要的问题是“每次旋转,原地进行4个位置交换,选择哪一块区域进行遍历(i, j)?”

  • n是偶数,选择把矩阵划分4块区域,(i, j)选择第一区域,就能使用(i, j)表示整个矩阵的元素

2024-02-04T14:50:46.029864985-rlcummkw.png

  • n是奇数,如图划分,(i, j)选择第一区域,也能使用(i, j)表示整个矩阵的元素

2024-02-04T14:50:46.081260799-syweizip.png

public void rotate(int[][] matrix) {
        int n = matrix.length;
        int i, j, temp;
        for (i = 0; i < n/2 ; i++){
                for (j = 0; j < (n + 1) / 2; j++){
                        temp = 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] = temp;
                }
        }
}

Leetcode 48.旋转数组 题解

0

评论区