当前位置: 首页 > news >正文

LeetCode--48.旋转图像

解题思路:

        1.获取信息:

                给定一个二维方阵表示一个图像,将图像顺时针旋转90度

                限制条件:必须原地旋转图像,不能使用另一个矩阵来旋转图像

        2.分析题目:

                限制不能使用另一个矩阵来旋转图像,但是我们硬要使用,可不可以呢?

                当然是可以,但是这道题我没有写这种方法

                我们发现,旋转九十度,可以将这个矩阵,一圈一圈剥下来,那每一条边可以看作是一个数组,也就是交换了一下数组的位置

                所以,我们可以使用一个长度为n的数组来作为辅助存储空间来解这道题

                但是,我也没有写这种方法,因为它既然说了不能使用另一个矩阵来旋转图像,那么我们就严格一点,就当它不能使用任何辅助存储空间

                那么该怎么做呢?

                旋转九十度,实际上就是四条边的旋转,四条边的旋转,也就是一些元素的位置交换,我们可以延续上面的可以一圈圈剥开的思路

                在每一圈剥开的时候,我们就处理剥开的那一圈,这样处理大概n/2次就可以旋转完

                那么,怎么处理剥开的那一圈呢?

                由于只有四条边,所以只用交换四次,我们可以将四条边上我们要交换的元素存储下来,就是四个元素,把它们的位置依次交换即可

                每条边有几个元素,我们就按上述操作处理几次,就可以得出结果了

                或者说,你想快一点,把时间复杂度做好看一点,你可以将矩阵看作是一个风车,它是由四块扇叶组成的,我们依次交换扇叶的位置,就可以得出结果了

                不过这次题解我就写了一种方法,就是不用辅助存储空间的方法,因为这道题可以说有点单调,每种方法的核心其实是大差不差的

        3.示例查验:

                你可以根据示例来检验你获取的信息是否正确,自己有没有理解这道题,并且可以检验自己的思路

        4.尝试编写代码:

                (1)常规法:

                        思路:我已经在分析题目环节说过了,就不作过多的阐述了

class Solution {
public:void rotate(vector<vector<int>>& matrix) {int n=matrix.size();int index=0;while(index<n/2){int si=layer;for(int i=si;i<n-1-si;i++){int top=matrix[si][i];//记录下左上方的元素matrix[si][i]=matrix[n-1-i][si];//左下方填入左上方matrix[n-1-i][si]=matrix[n-1-si][n-1-i];//右下方填入左下方matrix[n-1-si][n-1-i]=matrix[i][n-1-si];//右上方填入右下方matrix[i][n-1-si]=top;//右上方填入左上方}index++;}}
};

本次题解到此为止,你可以好好休息一下了,晚安

http://www.dtcms.com/a/285256.html

相关文章:

  • 快速了解网络爬虫
  • 设备驱动的私有数据设计
  • yocto开发(1)----bitbake的全流程分析
  • 指针数组和数组指针的应用案例
  • js对象简介、内置对象
  • 聊聊数据和功能测试面临的挑战有哪些?
  • #systemverilog# 关键字之 变量声明周期与静态方法关系探讨
  • 美团外卖霸王餐接口对接具体操作步骤
  • NW972NW974美光固态闪存NW977NW981
  • 【读论文】AgentOrchestra 解读:LLM 智能体学会「团队协作」去解决复杂任务
  • 海思3516CV610 卷绕 研究
  • JxBrowser 8.9.2 版本发布啦!
  • Python22 —— 标准库(random库)
  • 简单手写一个Spring boot starter
  • flask request实现两台PC之间文件传输通信
  • 华夏基金(ChinaAMC)推出全球首只人民币计价的代币化货币基金
  • AUTOSAR进阶图解==>AUTOSAR_SWS_BusMirroring
  • lombok版本过低导致@SuperBuilder注解编译无法通过(java: 类型变量数目错误; 需要3)
  • Fiddler 中文版在移动开发中的调试应用 从抓包到性能调优
  • CMSIS DSP FFT
  • Linux探秘坊-------15.线程概念与控制
  • 内容安全策略(CSP)详解:Web安全的关键防线
  • SegNet:一种用于图像分割的深度卷积编码器解码器架构
  • 简单易懂,动态分区分配算法
  • Leetcode刷题营第二十九,三十题:二叉树的中序以及后序遍历
  • mongosh 安装记录
  • ruoyi-cloud启动常见问题处理
  • set、map 比数组,json 对象的性能更好原因分析
  • Python元组(Tuple)指南
  • [RAG system] 信息检索器 | BM25 Vector | Pickle格式 | HybridRetriever重排序