打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LeetCode 48.旋转图像(中等)

题目描述:

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:

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

示例 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]]

示例 3:

输入:matrix = [[1]]
输出:[[1]]

示例 4:

输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]

提示:

  • matrix.length == n
  • matrix[i].length == n
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

题目分析:

这道题要求在原地对矩阵进行顺时针旋转 90 度的操作,我们拿示例 2 对顺时针旋转 90 度进行说明。

在上图中,相同颜色代表着需要相互交换的四个元素。例如红色方块,元素 5 需要移动到元素 11 的位置上,元素 11 又要移动到元素 16 的位置上,依次类推。所以,要在原地交换这四个元素,我们自然想到要一个临时变量存放其中一个元素值。例如,我们先把元素 11 存起来,然后把元素 5 放到元素 11 的位置上,接着把元素 15 放到元素 5 的位置上,把元素 16 放到原来元素 15 的位置上,最后把存起来的元素 11 放到原来元素 16 的位置上,这样,四个元素就互换完毕。每次需要执行这样的四元素互换的次数为 n - 1 次。循环交换完外面的矩阵元素后,再缩小矩阵,在内层矩阵继续执行四元素互换操作,最终就能得到顺时针旋转 90 度的矩阵了。

题解:

执行用时: 0 ms

内存消耗: 38.5 MB

class Solution {
    public void rotate(int[][] matrix) {
        // 临时变量存放要交换的元素值
        int temp = 0;
        int n = matrix.length - 1;
        // 循环交换四个元素,由外向内
        for (int i = 0; i <= n / 2; ++i) {
            for (int j = i; j < n - i; ++j) {
                temp = matrix[j][n - i];
                matrix[j][n-i] = matrix[i][j];
                matrix[i][j] = matrix[n-j][i];
                matrix[n-j][i] = matrix[n-i][n-j];
                matrix[n-i][n-j] = temp;
            }
        }
    }
}

题目来源:力扣(LeetCode)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
每日一起 剑指offer (顺时针打印矩阵)
元素和为目标值的子矩阵数量
Android中图像变换Matrix的原理、代码验证和应用(一)
前几天挂掉一个读者的滴滴二面矩阵题目
48. 旋转图像
技术图文:排序技术在求解算法题中的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服