【刷题日记】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

好了,本次就到这里

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

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

相关文章
|
7月前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
52 3
|
7月前
蓝桥杯真题代码记录(纸张尺寸
蓝桥杯真题代码记录(纸张尺寸
43 0
|
7月前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
45 0
|
Cloud Native
【刷题日记】473. 火柴拼正方形
本次刷题日记的第 52 篇,力扣题为:473. 火柴拼正方形,中等
|
Cloud Native
【刷题日记】1184. 公交站间的距离
好久不刷题,没有锻炼思维,感觉脑袋都要生锈了,刷题感觉还是要从简单题刷题才能慢慢找到感觉
|
7月前
每日一题——旋转图像
每日一题——旋转图像
|
Go Cloud Native
【刷题日记】75. 颜色分类
本次刷题日记的第 60 篇,力扣题为:75. 颜色分类,中等
|
算法
算法创作|纸牌三角形
算法创作|纸牌三角形
72 0
【寒假每日一题】AcWing 4652. 纸张尺寸
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
89 0
|
算法 程序员
拿捏汉诺塔问题(附有动图)
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
363 0