【C++】每日一题 48 旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

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

#include <vector>
using namespace std;class Solution {
public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size();for (int i = 0; i < n / 2; ++i) {for (int j = i; j < n - 1 - i; ++j) {int temp = matrix[i][j];matrix[i][j] = matrix[n - 1 - j][i];matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];matrix[j][n - 1 - i] = temp;}}}
};

朴实思路一般是:

  1. 先将矩阵沿着主对角线(左上到右下的对角线)进行转置。
  2. 然后将每一行按中点进行翻转。
  3. 进行转置操作时,只需要遍历矩阵的左上半部分(i < j),因为右下半部分会在后续的翻转操作中被处理。
  4. 在翻转每一行时,只需要遍历每一行的前一半元素即可,因为后一半元素会在翻转过程中被交换到正确的位置。

观察规律容易发现 matrix[i][j] = matrix[n - 1 - j][i];

也可以考虑用其他一次循环解决这个问题,采用分圈处理的方法。具体步骤如下:

  1. 将矩阵划分为四个边界,分别是上边界、下边界、左边界和右边界。
  2. 对于每一圈,将矩阵的四个边界进行旋转,即将上边界的元素依次移到右边界、右边界的元素依次移到下边界、下边界的元素依次移到左边界、左边界的元素依次移到上边界。
  3. 重复上述步骤,直到处理完所有的圈。

通过一次循环遍历每一圈,每次处理四个边界上的元素,实现了原地旋转图像的功能,时间复杂度为 O(n^2)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第四百六十二回

文章目录 1. 概念介绍2. 实现方法3. 示例代码4. 内容总结 我们在上一章回中介绍了"关于MediaQuery的优化"相关的内容&#xff0c;本章回中将介绍readMore这个三方包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的readMore是一个…

【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析完整AC代码】(L2-001 - L2-024)搞懂了赛场上拿下就稳了

L2-001 紧急救援 最短路路径打印 样例 输入1 4 5 0 3 20 30 40 10 0 1 1 1 3 2 0 3 3 0 2 2 2 3 2输出1 2 60 0 1 3分析 用一遍dijkstra算法。设立 n u m [ i ] num[i] num[i]和 w [ i ] w[i] w[i]表示从出发点到i结点拥有的路的条数&#xff0c;以及能够找到的救援队的数目…

Websocket (帧格式, 握手过程, Spring 中使用 WebScoket 协议)

什么是 WebSocket 客户端 A 和客户端 B 的消息传播需要借助服务器的中转 (原因是内网不能给另一个局域网的内网直接联通, 需要借助服务器的外网做 “中介”) (NAT 地址转换) Http 协议 不支持实时通讯 (或者说不支持服务器主动推送数据给客户端) TCP 本身是具有服务器推送数据这…

【verilog】 reg与寄存器的关系

一、前言 在Verilog中经常用reg定义具有数据寄存功能的单元&#xff0c;但在verilog的使用中&#xff0c;并不代表其一定就是寄存单元&#xff0c;reg还能进行组合逻辑描述&#xff0c;并且在一些场景下&#xff0c;只能使用reg来申明变量。 二、reg型变量生成组合逻辑 在Ve…

Java 中文官方教程 2022 版(四十四)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html 调用方法 原文&#xff1a;docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html 反射提供了一种在类上调用方法的方式。通常&#xff0c;只有在非反射代码中无法将类的实例强制转换为…

linux shell脚本编写(2)

Shell: 命令转换器&#xff0c;高级语言转换成二进制语言。是Linux的一个外壳&#xff0c;它包在Lniux内核的外面&#xff0c;用户和内核之间的交互提供了一个接口。 内置命令&#xff1a;在shell内部不需要shell编辑 外置命令&#xff1a;高级语言要用shell转换成二进制语言 …

分析Quartz(v2.3.2)QuartzSchedulerThread.run核心方法

文章目录 前言一、QuartzSchedulerThread.run 前言 最近项目中的定时任务&#xff0c;用Quartz框架取代了。最近也在学习Quartz框架这方面的知识&#xff0c;但是看代码过程有很多难以理解的地方。项目中使用数据库来存储的任务&#xff0c;本篇文章就从QuartzSchedulerThread…

(一)Jetpack Compose 从入门到会写

基本概念 Compose 名称由来 众所周知&#xff0c;继承在功能拓展上表现的很脆弱&#xff0c;容易类、函数爆炸&#xff0c;通过代理和包装进行组合会更健壮。 Compose 意为组合&#xff0c;使用上也是把 Compose 函数以 模拟函数调用层级关系的方式 组合到一起&#xff0c;最终…

PCL中VTK场景添加坐标系轴显示

引言 世上本没有坐标系&#xff0c;用的人多了&#xff0c;便定义了坐标系统用来定位。地理坐标系统用于定位地球上的位置&#xff0c;PCL点云库可视化窗口中的坐标系统用于定位其三维世界中的位置。本人刚开始接触学习PCL点云库&#xff0c;计算机图形学基础为零&#xff0c;…

一篇文章搞懂-线程与携程

推荐先阅读基础篇 http://t.csdnimg.cn/Fjq5O 1.定义 线程&#xff08;Thread&#xff09;是操作系统的资源,资源调度和执行的最小单位&#xff0c;创建、切换等操作消耗资源 协程&#xff08;Coroutine&#xff09;&#xff1a;无需操作系统&#xff0c;为编程语言自带。称为用…

【flask快速上手(二)】

目录 flask快速上手&#xff08;二&#xff09;渲染模板文件上传Cookies重定向 flask快速上手&#xff08;二&#xff09; 渲染模板 在 Python 内部生成 HTML 不好玩&#xff0c;且相当笨拙。因为你必须自己负责 HTML 转义&#xff0c; 以确保应用的安全。因此&#xff0c; F…

系统分析与设计(1)

系统分析与设计 &#xff08;Systems Analysis ad Design&#xff09; 系统分析(System analysis) (理解问题域) 系统设计(System design) (求可行性) 系统分析与设计是关于业务问题的解决和计算机应用程序的开发 初始阶段&#xff0c;问题具有非良性定义的边界与结构 解的本性…

基于Python的卷积网络的车牌识别系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

leetcode不同路径

. - 力扣&#xff08;LeetCode&#xff09; 62. 不同路径 中等 相关标签 相关企业 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下…

04_UART串口发送数据

1.配置芯片&#xff0c;如果PA9,PA10的UART引脚被占用&#xff0c;会自动进行重映射 2.代码 int main(void) {uint8_t temp[]"test";/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

定义在mian函数之外的数组的自动初始化

【题目描述】 开灯问题。有n盏灯&#xff0c;编号为1&#xff5e;n。第1个人把所有灯打开&#xff0c;第2个人按下所有编号为2的倍数的开关&#xff08;这些灯将被关掉&#xff09;&#xff0c;第3个人按下所有编号为3的倍数的开关&#xff08;其中关掉的灯将被打开&#xff0…

Unity Shader 流光 边缘光

前言 Unity2021.3.23 一、实现原理 Time控制UV的变化,再采样一张流光贴图.即可实现流光效果。 二、效果及源码展示 1.流光效果 效果描述: 1.边缘光(菲尼尔), 2.从上到下扫描光. 效果图如下: 代码如下: Shader "Unlit/ScanCode" {Properties{_MainTex ("T…

JavaEE企业开发新技术5

目录 2.18 综合应用-1 2.19 综合应用-2 2.20 综合应用-3 2.21 综合应用-4 2.22 综合应用-5 Synchronized &#xff1a; 2.18 综合应用-1 反射的高级应用 DAO开发中&#xff0c;实体类对应DAO的实现类中有很多方法的代码具有高度相似性&#xff0c;为了提供代码的复用性,降低…

MoneyPrinterTurbo-利用AI大模型,一键生成高清短视频

MoneyPrinterTurbo-利用AI大模型&#xff0c;一键生成高清短视频 在今天的信息爆炸的时代&#xff0c;短视频已经成为最受欢迎的信息传递方式之一。无论是分享生活瞬间&#xff0c;还是传递重要信息&#xff0c;短视频都是最直观&#xff0c;最具影响力的手段。但是&#xff0…

SpringBoot:正常启动,Controller 无法访问

一、server.servlet.context-path配置的作用 定义&#xff1a; server.servlet.context-path # Context path of the application. 应用的上下文路径&#xff0c;也可以称为项目路径&#xff0c;是构成url地址的一部分。 server.servlet.context-path不配置时&#xff0c;默认…