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

【Leetcode Top 100】48. 旋转图像

问题背景

给定一个 n × n n \times n n×n 的二维矩阵 m a t r i x matrix matrix 表示一个图像。请你将图像顺时针旋转 90 90 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

数据约束

  • n = m a t r i x . l e n g t h = m a t r i x [ i ] . l e n g t h n = matrix.length = matrix[i].length n=matrix.length=matrix[i].length
  • 1 ≤ n ≤ 20 1 \le n \le 20 1n20
  • − 1000 ≤ m a t r i x [ i ] [ j ] ≤ 1000 -1000 \le matrix[i][j] \le 1000 1000matrix[i][j]1000

解题过程

比较好想的做法是定义一个辅助矩阵,将对应行排列到相应的列中,再把所有元素覆盖回来。这样的做法需要 O ( N ) O(N) O(N) 的额外空间,就不写了。

另一个解决旋转问题的思路是将旋转拆解为多个翻转,本题中可以将顺时针旋转 90 90 90 度拆解为矩阵上下翻转和沿着主对角线翻转两个操作。这样的想法问题在于,面对第一次见到的问题,不一定能快速地找到拆解的方案,需要平时多积累。

还可以直接移动元素,需要注意的是当矩阵的阶数为奇数时,需要考察的范围是一个矩形。考虑到这种情况,需要将行或者列的循环结束条件修正为 i ( j ) < ( n + 1 ) / 2 i(j) < (n + 1) / 2 i(j)<(n+1)/2

具体实现

翻转矩阵

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for(int i = 0; i < n / 2; i++) {for(int j = 0; j < n; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[n - 1 - i][j];matrix[n - 1 - i][j] = temp;}}for(int i = 0; i < n; i++) {for(int j = 0; j < i; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}}
}

移动元素

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for(int i = 0; i < n / 2; i++) {for(int j = 0; j < (n + 1) / 2; 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;}}}
}

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

相关文章:

  • Redis(概念、IO模型、多路选择算法、安装和启停)
  • NVR小程序接入平台EasyNVR多品牌NVR管理工具:高效管理分散视频资源的解决方案
  • Scala关于成绩的常规操作
  • 【Axure高保真原型】天气模板
  • IDEA插件CamelCase,快速转变命名格式
  • Spring Boot英语知识网站:用户体验设计
  • 微信小程序按字母顺序渲染城市 功能实现详细讲解
  • ThingsBoard规则链节点:GCP Pub/Sub 节点详解
  • 技术文档的规划布局:构建清晰的知识蓝图
  • 【Leetcode 每日一题】632. 最小区间
  • Springboot整合分布式任务调度平台XXL-Job实现定时任务
  • 更优雅的 yolo v11 标注工具 AutoLabel Conda环境直接识别训练
  • PGSQL学习笔记 -- 从入门到放弃
  • 使用Spring Data MongoDB中的MongoTemplate实现分组查询最新的数据
  • 前端应用界面的展示与优化(记录)
  • C++学习日记---第14天(蓝桥杯备赛)
  • 什么是代理,nodenginx前端代理详解
  • vue修改el-table-column上下margin外边距调整行间距方法教程
  • 在Ubuntu2004中搭建基于ESP-IDF v5.1的ESP32-S3开发环境
  • MySQL篇
  • 缓存方案分享
  • Vue 2 安装并使用 Ag-Grid ^31.3.4、样式、中文化、组件设计
  • Java 8新特性详解与实战
  • Pytest使用Jpype调用jar包报错:Windows fatal exception: access violation
  • 【k8s深入理解之 Scheme】全面理解 Scheme 的注册机制、内外部版本、自动转换函数、默认填充函数、Options等机制
  • 力扣hot100-->排序