【LeetCode】48. 旋转图像

【中等】力扣算法题解析LeetCode48:旋转图像 要求将给定的 n×n 矩阵原地顺时针旋转90度。通过两步操作实现:先沿主对角线翻转(转置),再水平翻转每一行。时间复杂度为O(n²),空间复杂度为O(1)。代码演示了如何通过交换元素完成操作,并验证了示例的正确性。该方法高效且无需额外空间,适用于小到中等规模矩阵。 阅读详情

【LeetCode】48. 旋转图像

​

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

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

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

原地旋转

找规律可以发现:

  • matrix [i] [j] 的值应该移动到matrix[j] [n - i - 1]

将i = j,j = n - i - 1带入,依次类推可得:

  • matrix[j] [n - i - 1]的值应该移动到matrix[n - i - 1] [n - j - 1]
  • matrix[n - i - 1] [n - j - 1]的值应该移动到matrix[n - j - 1] [i]
  • matrix[n - j - 1] [i]的值应该移动到matrix[i] [j]

最后发现,又会回到matrix[i] [j],但是我们不能直接赋值,这样原来在该位置的值就会被覆盖掉。,应该用一个变量tmp先暂存**matrix[n - j - 1] [i]**的值,然后按照如下的赋值顺序:

  1. tmp = matrix[n - j - 1] [i]
  2. matrix[n - j - 1] [i] = matrix[n - i - 1] [n - j - 1]
  3. matrix[n - i - 1] [n - j - 1] = matrix[j] [n - i - 1]
  4. matrix[j] [n - i - 1] = matrix [i] [j]
  5. matrix [i] [j] = tmp

该对哪些元素进行交换?

  • n为偶数

我们需要枚举 n^2 / 4 = (n / 2) * (n / 2) 个位置,可以将该图形分为四块,以4 * 4的矩阵为例:

  • n为奇数

中心的位置经过旋转后位置不变,需要枚举(n^2-1) / 4 = ((n - 1) / 2) * ((n + 1) / 2)个位置,换一种划分方式,以5 * 5为例:

如何将奇数和偶数的情况统一起来呢?

行和列都是从零开始,零是偶数。

  • 对于行,偶数是 n1 / 2,奇数是(n2 - 1) / 2,而奇数和比它小的相邻的偶数,除以2的结果是相同的,则只需要表示成n / 2就好了,因为无论奇偶,结果都一样。
  • 对于列,偶数是 n1 / 2,奇数是(n2 + 1) / 2,这时候奇数少加一个1结果就不一样了,但是如果是偶数,加一个1也不影响结果,所以统一写成(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 + 1) / 2; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - j - 1][i];
                matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
                matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
                matrix[j][n - i - 1] = temp;
            }
        }
    }
}

用翻转代替旋转

原地反转中,已经找到了旋转后位置的规律:matrix [i] [j] 的值应该移动到matrix[j] [n - i - 1]

  1. 那么就先水平反转变成matrix [n - i - 1] [j]
  2. 然后在根据主对角线反转变成matrix [j] [n - i - 1]
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++) {
                matrix[i][j] ^= matrix[n - i - 1][j];
                matrix[n - i - 1][j] ^= matrix[i][j];
                matrix[i][j] ^= matrix[n - i - 1][j]; 
            }
        }
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < i; j++) {
                matrix[i][j] ^= matrix[j][i];
                matrix[j][i] ^= matrix[i][j];
                matrix[i][j] ^= matrix[j][i];
            }
        }
    }
}
高斯-约当(Gauss-Jordan)消元法——c++代码实现 具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见。——大神勿喷呀,我是一个小菜鸟~void Guss_Jordan(int n,double *a)//阶数n 系数矩阵a { double*a_temp = new double[n*n * 2];//a与单位矩阵的组合 阅读详情

相关推荐

UnityWebGL异常捕获全攻略:从报错提示到完美解决的3种配置方案

本文详细解析了UnityWebGL项目中异常捕获的三种核心配置方案:禁用异常、仅捕获显式异常以及完全捕获异常(无堆栈跟踪)。通过对比不同方案在构建体积、运行性能及错误信息详细度上的差异,帮助开发者根据开发、测试与发布阶段的不同需求,选择并配置最优的异常处理策略,从而有效提升WebGL应用的调试效率和线上稳定性。

5f4d3s2a1q的博客 397

48. 旋转图像

给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]] 示例 2: 输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] 输出:...

allway2的博客 525

告别糊涂账!用CKM3底表逻辑自建物料成本监控报表(含ABAP代码片段)

本文详细介绍了如何利用CKM3底表逻辑自建物料成本监控报表,解决标准报表无法穿透成本差异根源的问题。通过ABAP代码片段和四步架构法,帮助财务团队精准分析成本构成,优化成本核算批量处理,实现多维透视差异分析,提升成本监控效率。

weixin_30740295的博客 266

【LeetCode】48. 旋转图像 (JavaScript)

原题 难度中等1140收藏分享切换为英文接收动态反馈 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]] 示例 2: 输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15.

xsm_656的博客 1461

Cadence IC617仿真实践:有源电流镜的共模抑制比优化策略

本文基于Cadence IC617平台,详细介绍了有源电流镜共模抑制比(CMRR)的仿真与优化全流程。从电路搭建、DC工作点分析到AC仿真获取差模/共模增益,逐步解析CMRR计算方法。核心优化策略包括提升电流镜输出阻抗、优化差分对匹配性及调整晶体管尺寸,并探讨了与电源抑制比(PSRR)的权衡,为模拟集成电路设计提供实用指南。

weixin_29313817的博客 183

第7篇-SAP MM模块-JIT应用实战解析,从计划协议到JIT供应的关键配置与流程

本文深入解析SAP MM模块中的JIT(Just In Time)供应模式,从计划协议到JIT供应的关键配置与流程。通过动态计划行管理、需求聚合与分解等核心功能,实现精确数量、时间和地点的物料供应。文章详细介绍了主数据准备、计划协议配置、MRP参数精调及EDI集成方案,并提供了实施中的典型问题与解决方案,助力企业优化供应链管理。

weixin_30363509的博客 947

【LeetCode-中等】48. 旋转图像(图文详解)

java:借用辅助数组、两次翻转法

丨康有为丨的博客 799

在 IW31 录入班次与当班负责人,并让 IW38 列表同步显示:基于 IWO10018 + IWOC0004 的一套可落地增强方案

摘要 本文详细介绍了在SAP PM模块中实现工厂设备维护订单增强的完整方案,重点解决两个核心需求:在订单创建时新增班次负责人和班次字段,并在订单列表中直接显示这些信息。文章从需求分析、技术设计到具体实现步骤进行了系统阐述。 关键实现步骤包括: 通过CI_AUFK结构扩展AUFK表,确保字段持久化存储 使用IWO10018增强在IW31/IW32/IW33事务中添加输入界面 通过IWOC0004增强在IW38订单列表中显示新增字段 采用优化的数据填充策略提升性能 该方案不仅满足业务需求,还考虑了用户体验和系统

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 174

LeetCode 48. 旋转图像(旋转矩阵)三种解法

## 48. 旋转图像(旋转矩阵) 难度:Medium 语言:Java 题目 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。 说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11],

Camp Nou 1954

第25节:cesium 地形开挖综合实例-地下管网(含源码+视频)

地图开挖综合示例,包括底图切换,绘制开挖区域,移除开挖区域,影藏地图等等。

qq_29384639的博客 1779

uniapp(安卓苹果APP端):解决video组件播放视频卡顿,视频一直加载非常缓慢或加载不出来解决方案,解决多个video组件视频播放很卡一直加载非常慢怎么办(无论真机调试还是本地测试都完美搞定)

uni-app APP端video组件播放视频卡顿,uniapp video app 加载不出来解决方案,uniapp app使用video视频播放卡顿,uni-app APP端video组件播放视频卡顿_uniapp video老是加载,uniapp开发app视频在真机上卡顿,安卓app播放视频很卡,苹果ios真机运行播放视频加载很慢怎么办,解决UniApp中MP4视频播放卡顿问题,解决m3u8视频播放很卡的问题,uniapp 使用video组件,部分视频加载非常慢,uniapp视频播放卡顿,安卓视频播放

✅ 精选推荐文章 7914

LeetCode : 48. 旋转图像(Rotate Image)解答

48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ &nbsp;&nbsp;&nbsp;&nbsp;[1,2,3], &nbsp;&nbsp;&nbsp;&nbsp;[4,5,6], &nbsp;&nbsp...

阿飞的博客 6306

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

力扣---leetcode48-旋转图像

本文介绍了原地旋转n×n矩阵90度的方法,通过两次翻转实现:先沿主对角线转置交换元素,再左右翻转每行。这种方法避免了直接坐标变换的复杂性,步骤清晰且不易出错。代码实现时需注意只处理矩阵右上部分防止重复交换。该方法时间复杂度O(n²),空间复杂度O(1),是面试中推荐的稳健解法。逆时针旋转可采用先左右翻转再转置的方案。

一个coder的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

力扣48.旋转图像

力扣48.旋转图像这道题要求把给定矩阵旋转90度,并且不允许使用额外矩阵来完成旋转图像。于是这道题只能使用原地旋转的方法来解决。

沉迷写代码的程序猿的博客 709

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《LeetCode力扣练习》第48题 旋转图像 Java

《LeetCode力扣练习》第48题 旋转图像 Java 一、资源 题目: 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]] 示例 2: 输入:matrix = [[5,1,9,11],[2,4,8,10],

XRT_knives的博客 277

48. 旋转图像【 力扣(LeetCode) 】

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

yyh520025的博客 663

LeetCode 力扣 48. 旋转图像

题目描述(中等难度) 将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。 解法一 可以先转置,然后把每列对称交换交换一下。 public void rotate(int[][] matrix) { //以对角线为轴交换 for (int i = 0; i < matrix.length; i ) { ...

wind_liang的博客 1144

力扣题解48. 旋转图像

力扣题解48. 旋转图像题解题思路代码结束语 题 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10

不想在做搬运工 339

力扣【48-旋转图像】【数组-C语言】

矩阵顺时针旋转90°就是矩阵的第一行变为倒数第一列,第二行变为倒数第二列,第三列变为倒数…(仅看行),相当于平时拿手机时竖着看,现要看电影手机则横着放。再看下对应的数字位置的变化情况,我们把矩阵中的每个元素所在的行列看作在平面坐标系下的坐标。以示例2中矩阵第一个数字(5)为例,数字5会移动到数字11的位置上,11移动到数字16的位置上,15移动到5数字最初的位置,这就是顺时针旋转90°后,一个元素的位置变化(一个数字位置的变化会导致其他数字位置相应的变化,我把这些变化的位置串起来(路径)称为“一轮”)

一只喜欢code的fox 835

力扣 LeetCode 48. 旋转图像

由于题目要求原地旋转,所以考虑从图像本身入手,把它看成一题数学题,就会发现把矩阵旋转相当于是先对其做轴对称操作,再做一次上下对称操作。 例: 1 2 3 轴对称 9 6 3 上下对称 7 4 1 4 5 6 ——> 8 5 2 ——> 8 5 2 7 8 9 7 4 1 ..

weixin_43304992的博客 221

力扣48-旋转图像(详细两次旋转100%Java版)

详细介绍旋转图像这类题的方法,通过翻转到到不同方向的旋转,及里面要注意的细节。看完一定懂!!!

ItDaChuang的博客 347

leetcode48.旋转图像

从4*4矩阵开始,将顶层放到右侧,右侧放到下层,下层放到左侧,再对中间的2*2重复这个操作,以此类推。【大厂程序员带你刷力扣】【LeetCode 48】旋转图像。

weixin_74175349的博客 312

python力扣48.旋转图像

一种完全由我原创的笨方法:通过观察发现,如果将旋转后的矩阵每一列翻转,那么原矩阵的[ i ][ j ]位置元素在旋转后会出现在新矩阵的[ j ][ i ]位置。也就是说,当你修改某一行时,所有行都会受到影响。输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]。

m0_46330606的博客 572

LeetCode48-旋转图像

LeetCode48-旋转图像 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2]...

lyd1995的博客 321

LeetCode 48:旋转图像

目录LeetCode 48:旋转图像题目描述解题 LeetCode 48:旋转图像 题目描述 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 【示例 1】 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 【示例 2】 给定 matrix = [ [ 5, 1, 9,11], [ 2

s_Shune 376

48. 旋转图像 - 力扣(LeetCode)

问题,解题规律为:先沿对角线反转二维矩阵,再反转矩阵的每一行,这样就能顺时针反转整个矩阵。输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]旋转图像,这意味着你需要直接修改输入的二维矩阵。从右到左)交换对称位置的元素,实现行的反转。使用另一个矩阵来旋转图像。开始),避免重复交换。的值,实现矩阵的转置。遍历矩阵的每一行,调用。

q1111111da的博客 447
上一篇: 单调栈学习与应用
下一篇: 【LeetCode】498. 对角线遍历
Sancean
博客等级 码龄6年 2472粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值