【代码练习】旋转矩阵题解思路记录分析

这篇具有很好参考价值的文章主要介绍了【代码练习】旋转矩阵题解思路记录分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 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]
]

题解1

思路

首先第一反应是新建一个N维矩阵,倒序将一维数组按列填入新矩阵中,代码如下。

代码

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:

        n = len(matrix)
        for i in range(n):
            res = [[0 for x in range(n)] for y in range(n)]
        print(res)  # [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

        for j in range(n):
            ls = matrix.pop()
            for k in range(n):
                print(ls[k])
                res[k][j] = ls[k]
                # print(res, res[k][j])
                
        return res

复习知识点

知识点1.初始化固定长度为n的空列表

方法一:使用for循环和append()
arr = []
for i in range(n):
    arr.append(0)
方法二:使用列表推导

用列表推导可以编写高效率的代码,它的执行速度比for循环快35%

arr = [0 for i in range(n)]
方法三:使用*运算符

运算符可以用作[object] * n,其中n是数组中元素的数目:

arr = [0]*n

知识点2.获取列表最后一个值

方法一:使用索引,仅获得,不改变列表
numbers = [1, 2, 3, 4, 5]
# 打印最后一个元素
print(numbers[-1])
方法二:使用pop(),获得的同时列表移除最后一个元素
numbers = [1, 2, 3, 4, 5]
# 打印最后一个元素
print(numbers.pop())

题解2

思路

仔细阅读题目可知,该题不希望使用额外空间,仅进行矩阵内部值的交换
如何进行交换呢?
以四维矩阵为例,需从图左转换到图右。
【代码练习】旋转矩阵题解思路记录分析
首先进行上下翻转,得到如下矩阵
【代码练习】旋转矩阵题解思路记录分析

可发现左对角线已完成90°旋转,只需将对角线两侧两两交换即可得到想要的矩阵。
对角线两侧互换时可理解为若干个正方形两条边互换,第一个正方形以[0][0]为顶角,第二个正方形以[1][1]为顶角,以此类推,得到一个i * j的循环,进行交换即可。

代码

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        # 1.翻转列表
        matrix.reverse()  # 此时对角线已归位
        # 2.左对角线两侧互换
        for i in range(len(matrix)):
            for j in range(i, len(matrix)):
                temp = matrix[i][j]
                matrix[i][j] = matrix[j][i]
                matrix[j][i] = temp

复习知识点

知识点3.列表翻转

方法一:reverse()方法,无返回值,原地翻转
a = [1, 2, 3, 4, 5, 6, 7, 'a', 'b']
a.reverse()
print('列表反转结果:', a)  # [‘b’, ‘a’, 7, 6, 5, 4, 3, 2, 1]
方法二:内置reversed()函数

内置函数reversed()函数不对原列表做任何修改,而是返回一个逆序排列后的迭代对象,得到的结果需转换成列表

a = [1, 2, 3, 4, 5, 6, 7, 'a', 'b']
a1 = reversed(a)
print('列表反转结果(迭代对象):', a1)  # <list_reverseiterator object at 0x00000243EF467A20>
print('列表反转结果转换成列表:', list(a1))  # [‘b’, ‘a’, 7, 6, 5, 4, 3, 2, 1]
方法三:列表切片

list[x:y:z]
x:切片开始位置,默认为0
y:切片截止(但不包含)位置,默认为列表长度
z:切片的步长,默认为1;-1则表示从最后元素开始切片文章来源地址https://www.toymoban.com/news/detail-477120.html

# 切片实现反转
a = [1, 2, 3, 4, 5, 6, 7, 'a', 'b']
print('列表反转结果:', a[::-1])  # [‘b’, ‘a’, 7, 6, 5, 4, 3, 2, 1]

到了这里,关于【代码练习】旋转矩阵题解思路记录分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CCF-CSP真题《202305-2 矩阵运算》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202305-2 试题名称: 矩阵运算 时间限制: 5.0s 内存限制: 512.0MB 问题描述: Softmax(Q×KTd)×V 是 Transformer 中注意力模块的核心算式,其中 Q、K 和 V 均是 n 行 d 列的矩阵,KT 表示矩阵 K 的

    2024年02月16日
    浏览(24)
  • 算法练习-赎金信(思路+流程图+代码)

            难度:中等         分类:哈希表         难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记,旨在督促自己认真学习。         给你

    2024年02月22日
    浏览(35)
  • 算法练习-替换数字(思路+流程图+代码)

            难度:简单         分类:字符串         难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。         给定一个字符串S,它包含小写字母和数字字符,请编写一个函数,将字符串

    2024年02月20日
    浏览(32)
  • 算法练习-右旋字符串(思路+流程图+代码)

            难度:简单         分类:字符串         难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。         字符串的【右旋转】操作是把字符串尾部的若干个字符转移到字符串的前

    2024年01月22日
    浏览(31)
  • 算法练习-长度最小的子数组(思路+流程图+代码)

            难度:简单         分类:数组         难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。         给定一个含有个正整数的数组和一个正整数s,找出该数组中满足其和

    2024年01月18日
    浏览(28)
  • 题解 | #放苹果# 仅画图方便理解dp矩阵就不放代码了

    小而美の公司收集贴 大数据方向随缘解答 网易互娱 游戏开发 上岸面经 【奖】春季刷题节,牛友们一起冲大厂! QQ前端一面凉经(2023.10.9) 转发|央企|中煤科工集团重庆研究院有限公司岗位火热招募中! 3.9 美团笔试 bigo后端实习二面+三面 秋招常见Spring面试题(八股文背诵

    2024年03月28日
    浏览(34)
  • 【信息奥赛题解】四平方和(详细分析题解 & C++ 代码)

    摊主的个人技术博客:https://rickyxcoder.top/ 🧑🏻‍💻 备用站点:https://rickyxcoder.gitee.io/ 🚀 题目浏览 【题目名称】四平方和 【题目描述】 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 4 4 个正整数的平方和。 如果把 0 0 0 包括进去,就正好可以表示

    2023年04月09日
    浏览(23)
  • 欧拉角,四元数和旋转矩阵互转代码【python版】

    欧拉角以 Roll、Pitch、Yaw 的顺序表示 四元数以[ q w q_w q w ​ , q x q_x q x ​ , q y q_y q y ​ , q z q_z q z ​ ]的顺序表示 代码包括了 欧拉角与四元数互转 , 旋转矩阵与四元数互转 , 欧拉角与旋转矩阵互转 ,输入参数均为 np.array 形式 代码内置了角度制和弧度制😃😃 当时因为这块

    2023年04月22日
    浏览(36)
  • 【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析

      首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识 超详细的网络安全笔记 分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记​编辑https://m.tb.cn/h.5JdFcih?tk=OuVrWRl9vMx%20CZ3457 若已安装,请

    2024年02月06日
    浏览(32)
  • 【解决问题思路分析】记录hutool默认使用服务端上次返回cookie的问题解决思路

    本服务需要调用第三方接口获取数据,首先调用public-key接口获取公钥,然后用公钥加密密码,将用户名和密码传入/ticket接口,获取Cookie和response body中的token。 由于是调用第三方接口出现问题,第一步先拉通第三方对接人查看后台日志,对方使用apisix作为api网关,初步判断是

    2024年02月07日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包