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

48 旋转图像

在这里插入图片描述
解题思路:
\qquad 这道题同样需要用模拟解决,原地算法要求空间复杂度尽量小,最好为 O ( 1 ) O(1) O(1)。模拟的关键是找到旋转的内在规律,即旋转前后的位置坐标的变化规律。

\qquad 正方形矩阵类似洋葱,可以由不同大小的正方形数字分层组合而成,而旋转后的元素只在所在的那一层中进行位置变换,且四次变换后可回到原位置,若将元素四次变换经过的位置找出来,把元素按照旋转顺序进行一次移动即可完成旋转。

\qquad 我们把一层正方形提取出来看,定义正方形左上角的坐标为[i, i],正方形边长为n,则正方形边界为m = i+n-1,边上任意位置元素[i, i+j]经过一次旋转得到[i+j, m],经过第二次旋转得到[m, m-j],继续旋转得[m-j, i],最后旋转又回到[i, i+j]。将这四个位置上的元素按顺序移动即可完成旋转,正方形一条边上所有的元素旋转完毕后,进入下一层,i+1n-2。当n <= 1时,可以认为矩阵已经旋转完成。

	void rotate(vector<vector<int>>& matrix) {int n = matrix.size();int i = 0, temp = 0;while(n > 1){for(int j = 0; j < n-1; j++){temp = matrix[i][i+j];matrix[i][i+j] = matrix[i+n-1-j][i];matrix[i+n-1-j][i] = matrix[i+n-1][i+n-1-j];matrix[i+n-1][i+n-1-j] = matrix[i+j][i+n-1];matrix[i+j][i+n-1] = temp;}i++;n -= 2;}}

http://www.mrgr.cn/news/37892.html

相关文章:

  • 2516. 每种字符至少取 K 个
  • 【顺序表使用练习】发牌游戏
  • java设计模式
  • Java项目——苍穹外卖总结
  • 基于 C# 的文本文件的编码识别
  • ARM点灯---看手册
  • LLM Agent系列 | 端侧Agent路由器,合纵连横AI江湖,破局端侧大模型之困!
  • LeetCode[中等] 78.子集
  • Vue 3 技术体系
  • 基于Hive和Hadoop的电商消费分析系统
  • Meta震撼发布Llama3.2大规模模型
  • BufferQueue低延迟优化,以及SurfaceView帧率上限问题解决
  • 线性代数~行列式计算
  • 一款开源的通用PDF处理神器,功能强悍!
  • SpringBoot整合JPA实现CRUD详解
  • 【HTML|第1期】HTML5视频(Video)元素详解:从起源到应用
  • 鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发
  • 算法——冒泡排序
  • 【洛谷】AT_abc178_d [ABC178D] Redistribution 的题解
  • 手搓一个Agent#Datawhale 组队学习Task3