当前位置: 首页 > 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.lryc.cn/news/591599.html

相关文章:

  • ACOUSLIC-AI挑战报告:基于低收入国家盲扫超声数据的胎儿腹围测量|文献速递-医学影像算法文献分享
  • Leetcode 03 java
  • 记录Leetcode中的报错问题
  • Java数组补充v2
  • sqli-labs靶场通关笔记:第25-26a关 and、or、空格和注释符多重过滤
  • 融智兴科技: RFID超高频洗涤标签解析
  • 代码随想录算法训练营第二十三天
  • Java 中的类和对象
  • 数据结构自学Day9: 二叉树的遍历
  • Git简介与特点:从Linux到分布式版本控制的革命
  • redis中间件
  • git merge-base查看某个分支从哪里拉出来的、主main分支上的某个时间之后某人的提交合并到特定分支(使用 cherry-pick 的场景)
  • 【MySQL事务】事务的隔离级别
  • 逆向破解京东评论加密参数|Python动态Cookie解决方案
  • 开源Agent平台Dify源码剖析系列(五)核心模块core/agent之CotChatAgentRunner
  • 文字转图片的字符画生成工具
  • 今日行情明日机会——20250717
  • Web3.0 实战项目、简历打造、精准投递+面试准备
  • springboot 整合spring-kafka客户端:SASL_SSL+PLAINTEXT方式
  • 流式数据处理实战:用状态机 + scan 优雅过滤 AI 响应中的 `<think>` 标签
  • 面试高频题 力扣 200.岛屿数量 洪水灌溉 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • 【Lua】题目小练1
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
  • yolo8+ASR+NLP+TTS(视觉语音助手)
  • RK3566开发板调试记录:从编译配置到功能优化
  • 杰理AC70NN项目用脚本自定义添加.mk文件,直接链接进主Makefile脚本编译
  • 微服务的编程测评系统3-加密-日志-apifox-nacos-全局异常
  • 用Python实现神经网络(一)
  • RuoYi-Cloud 定制微服务
  • 微服务网站开发学习路线与RuoYi-Cloud实战指南