首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >​LeetCode刷题实战48:旋转图像

​LeetCode刷题实战48:旋转图像

作者头像
程序员小猿
发布于 2021-01-20 02:56:10
发布于 2021-01-20 02:56:10
3560
举报
文章被收录于专栏:程序IT圈程序IT圈

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 旋转图像,我们先来看题面:

https://leetcode-cn.com/problems/rotate-image/

You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise). You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

题意

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

样例

代码语言:javascript
AI代码解释
复制
示例 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]
]

我们来看两个动态图:

题解

https://www.cnblogs.com/techflow/p/12687271.html

这个动图一看就明白了,也就是说我们需要将一个二维矩阵顺时针旋转90度。这个题意我们都很好理解,但是题目当中还有一个限制条件:我们不能额外申请其他的数组来辅助,也就是对我们的空间利用进行了限制。

如果没有这个条件限制其实很容易,我们只需要算出每一个坐标旋转之后的位置,我们重新创建一个数组然后依次填充就行了。

我们忽略矩阵当中具体的数据,而来看看矩阵旋转前后的坐标变化。这是矩阵旋转之前的坐标:

旋转之后,坐标变成了:

我们对照上面两张图观察一下,可以看出对于坐标(i, j)来说,它旋转90度之后得到的结果应该是(j, n-1-i)。这里的n是行数。

我们有了这个式子之后,我们可以继续推广。我们发现(i, j)位置的点旋转之后到了(j, n-1-i)。而(j, n-1-i)位置的点旋转之后到了(n-1-i, n-1-j),同理(n-1-i, n-1-j)旋转之后到了(n-1-j, i),最后我们发现(n-1-j, i)旋转之后回到了(i, j)。

也就是说对于一次旋转来说,(i, j), (j,n-1-i), (n-1-i, n-1-j), (n-1-j, i)这四个位置的元素互相交换了位置,并没有影响到其他位置。其实这个也是很容易想明白的,因为题目给定的是一个方阵。

我们看下下图就理解了:

也就是说我们只需要遍历矩阵四分之一的部分,然后通过坐标拿到互相交换的4个位置,然后交换它们的元素即可。

代码

代码真的很简单,只有几行:

代码语言:javascript
AI代码解释
复制
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        
        # 注意一下范围和下标即可
        for i in range(n//2):
            for j in range(i, n-1-i):
                matrix[i][j], matrix[j][n-1-i], matrix[n-1-i][n-1-j], matrix[n-1-j][i] = \
                matrix[n-1-j][i], matrix[i][j], matrix[j][n-1-i], matrix[n-1-i][n-1-j]

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。

上期推文:

LeetCode1-20题汇总,速度收藏!

LeetCode21-40题汇总,速度收藏!

LeetCode刷题实战40:组合总和 II

LeetCode刷题实战41:缺失的第一个正数

LeetCode刷题实战42:接雨水

LeetCode刷题实战43:字符串相乘

LeetCode刷题实战44:通配符匹配

LeetCode刷题实战45:跳跃游戏 II

LeetCode刷题实战46:全排列

LeetCode刷题实战47:全排列 II

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode48, 如何让矩阵原地旋转90度
这个动图一看就明白了,也就是说我们需要将一个二维矩阵顺时针旋转90度。这个题意我们都很好理解,但是题目当中还有一个限制条件:我们不能额外申请其他的数组来辅助,也就是对我们的空间利用进行了限制。
TechFlow-承志
2020/04/14
7930
LeetCode48, 如何让矩阵原地旋转90度
数据结构与算法-1 :旋转图像
从本文开始,我将开启一个新的系列文章的编写数据结构与算法,在本系列文章中,我将对牛客、LeetCode等主流算法刷题平台的精彩题目进行讲解,实现语言包括Python(主)、Javascript、C、C++,同时我也会将相关算法与我们的实际开发项目结合,帮助大家更好的理解这略显枯燥的算法。
石璞东
2020/05/22
8080
48. 旋转图像
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
lucifer210
2019/10/15
8520
LeetCode 图解 | 48 . 旋转图像
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
五分钟学算法
2020/04/22
5350
Leetcode 48 Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise).
triplebee
2018/01/12
7080
打卡群刷题总结0707——旋转图像
链接:https://leetcode-cn.com/problems/rotate-image
木又AI帮
2020/07/14
3230
LeetCode初级算法之数组:旋转图像
题目描述: 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。
韩旭051
2020/06/23
1.2K0
LeetCode初级算法之数组:旋转图像
​LeetCode刷题实战46:全排列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
4400
​LeetCode刷题实战46:全排列
leetcode: explore-array-31 旋转矩阵
题目是英文的,但是看这个题目英文理解起来也不是很困难。关键词: 1、matrix: 矩阵 2、2D matrix: 二维矩阵 3、rotate: 旋转 4、clockwise: 顺时针 5、90 degrees: 90度
用户7685359
2020/08/24
5220
leetcode: explore-array-31 旋转矩阵
矩阵旋转的解决
今天做了一道 leetcode 关于矩阵旋转(rotate-image,点击可查看原题)的题目,自己写了一种解法(基于Python),网上也看到一些比较好的解决方式,借此做一个总结。
用户7685359
2020/08/22
1.2K0
【每日一题】48. Rotate Image
You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
公众号-不为谁写的歌
2020/10/30
3380
【每日一题】48. Rotate Image
LeetCode 48. 旋转图像
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
freesan44
2020/06/03
3680
LeetCode 面试题 01.07. 旋转矩阵
https://leetcode-cn.com/problems/rotate-matrix-lcci/
freesan44
2021/10/26
5010
LeetCode 面试题 01.07. 旋转矩阵
程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)
给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转90度。
Michael阿明
2020/07/13
3490
一起刷 leetcode 之旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
每天晒白牙
2020/08/20
8150
Leetcode 【48、926、1014】
如果使用常规方法,需要找规律得到每个位置变换后的位置,比较繁琐。一种巧妙的方法是将图像旋转 90° 等价于先将图像转置,然后再将每一行数字反转。因此,需要遍历两次 matrix,先转置再反转每一行,时间复杂度为 O(n)。
echobingo
2019/06/24
4910
​LeetCode刷题实战80:删除排序数组中的重复项 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3250
​LeetCode刷题实战80:删除排序数组中的重复项 II
经典算法面试题目-矩阵旋转90度(1.6)
题目 Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a me
谙忆
2021/01/21
1.1K0
经典算法面试题目-矩阵旋转90度(1.6)
​LeetCode刷题实战27:移除元素
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2980
​LeetCode刷题实战31:下一个排列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3740
相关推荐
LeetCode48, 如何让矩阵原地旋转90度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档