【刷题日记】48. 旋转图像

简介: 本次刷题日记的第 66 篇,力扣题为:48. 旋转图像,中等

本次刷题日记的第 66 篇,力扣题为:48. 旋转图像中等

一、题目描述:

image.png

旋转图像,看上去明明是旋转表格,咋就旋转图像呢?


二、这道题考察了什么思想?你的思路是什么?

看看旋转图像这个题给我们讲述了哪些重要信息:

  • 题目给出了一个二维的矩阵,是 n*n 的,意味着一定是正方形的,宽高一定是一样的
  • 要求我们将上述的二维矩阵转顺时针旋转 90 度,而且要求我们在原来的地址上面修改,而不是返回一个结果

分析

题目很简短,表达的意思也很明确,留下的只有我们爱思考的小脑袋

仔细思考一下这个题,咱们暂时可以想到的解法可以有 2 个方向:

  • 第一是直接在原来的数组上进行数据和数据之间的交换,不会引入额外过多的空间消耗
  • 第二种便是,我们引入一个帮助的数组空间,处理完毕后,将帮助数据 copy 给原有的 matrix 数组

上述两种方式,相对无脑一点的自然是第二种,咱们可以稍加思考,对于一个矩阵,咱们遍历的时候是从左到有,从上到下

那就先来一个无脑的,毕竟比较容易上手

那么如果是要旋转 90 度,咱们还是按照同样的方法遍历的话,是不是对于原数组来说,就是从下到上,从左到右的遍历就可以了?

理论上常规遍历是这样的:

image.png

那么旋转 90 度的时候,我们可以理解成是这样的:

image.png

看了这个图,我们是不是就可以理解如果我们引入一个帮助空间,按照左图的逻辑遍历原有数组,数据给到帮助空间中,最后将帮助空间拷贝给到原有数组空间上

其实看到这个图就非常好理解了,接下来就是编码实现的过程了,注意遍历的顺序

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:

func rotate(matrix [][]int) {
    n := len(matrix)
    help := make([][]int, n)
    for i := range help {
        help[i] = make([]int, n)
    }
    for i, row := range matrix {
        for j, v := range row {
            help[j][n-1-i] = v
        }
    }
    copy(matrix, help)
}

四、总结:

image.png

这种实现方式看上去还是比较简单的,思路清晰的话,实现起来就会很方便,可以看出时间复杂度是 O(n^2) ,咱们是遍历了每一个格子

空间复杂度也是 O(n^2) , 咱们开辟了一个 help 二维数组,引入了额外的空间消耗

当然,我们也可以选择思考第一种方式来解这个题,咱们就要好好找旋转前和旋转后矩阵每个格子之间的关系了,再会

原题地址:48. 旋转图像

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
25天前
|
算法
每日一题:LeetCode-75. 颜色分类
每日一题:LeetCode-75. 颜色分类
|
13天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
4月前
每日一题——旋转图像
每日一题——旋转图像
|
10月前
|
Cloud Native
【刷题日记】473. 火柴拼正方形
本次刷题日记的第 52 篇,力扣题为:473. 火柴拼正方形,中等
|
10月前
|
Go Cloud Native
【刷题日记】75. 颜色分类
本次刷题日记的第 60 篇,力扣题为:75. 颜色分类,中等
|
11月前
|
机器人 Java Python
leetcode每日一题.面试题13:机器人的运动范围
leetcode每日一题.面试题13:机器人的运动范围
51 0
|
12月前
|
机器学习/深度学习
图解LeetCode——48. 旋转图像
图解LeetCode——48. 旋转图像
4249 0
|
12月前
|
算法 机器人
图解LeetCode——面试题13. 机器人的运动范围
图解LeetCode——面试题13. 机器人的运动范围
60 1
|
前端开发
前端知识案例学习15-实现3d得旋转
前端知识案例学习15-实现3d得旋转
59 0
前端知识案例学习15-实现3d得旋转