LeetCode hot100-20

48. 旋转图像

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

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

这题说了不能用辅助矩阵,但是不辅助我做不出来。还是暴力解了,感觉leetcode一般只检测超时,检测不了开辟辅助空间的情况,所以还是能通过。但是这样肯定不对嘛,看了答案,就是一个数学问题,主要是转来转去数组里的i,j到底是啥子还不好想,以及循环的跳出条件不好想。

先贴一个我的代码

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

    }
}

官方解法二
一个位置的数要旋转,涉及到包含自身共四个位置的旋转。用一个temp记录下第一个数,然后一次旋转赋值,就不用额外的数组空间了。
循环i<n/2,j<(n+1)/2;这个画一个n为奇数的矩阵就能看出来。循环只需要处理左上角2乘3的一个矩阵,剩下的就已经旋转好了。
旋转四个位置的坐标怎么确定呢,我的方法是选定第一行第二列的小方格。也就是i=0,j=1,要旋转到这个位置的小方块是第四行第一列的小方格,行号为3,列号为0。它怎么用n,i,j表示呢,行号相当于n-j-1=3,列号相当于i=0。一看就是matrix[i][j]=matrix[n-j-1][i];其他的旋转位置同理确定。不是特别好想,但是用特殊法还是可以一次性做对的。

在这里插入图片描述
官方代码

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;
            }
        }
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/rotate-image/solutions/526980/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何借用 NTFS 交换数据流 实现隐藏文件?如何使用【文件包含】PHP伪协议?不同操作系统如何实现文件隐藏和木马伪装?

如何借用 NTFS 交换数据流 实现隐藏文件?如何使用【文件包含】PHP伪协议?不同操作系统如何实现文件隐藏和木马伪装? NTFS交换数据流(Alternate Data Streams, ADS)是NTFS文件系统特有的一种功能,它允许在同一个文件名下存储多个数据流。除了默认的数据流(通常用于存储文…

Wi-Fi 标准的演进

在数字时代的今天&#xff0c;Wi-Fi已经成为了我们生活中不可或缺的一部分&#xff0c;但这一无线通信技术的演进却是一个精彩而丰富的历程。从最初迈出的第一步&#xff0c;到如今的Wi-Fi 7高速数据传输&#xff0c;每一个Wi-Fi标准的诞生都伴随着无数创新和技术的突破。 802.…

Web漏洞--WAF绕过+堆叠查询

Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql语句(多条)一起执行。而在真实的运用中也是这样的&#xff0c;我们知道在mysql 中&#xff0c;主要是命令行中&#xff0c;每一条语句结尾加;表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做…

Cornflakes: Zero-Copy Serialization for Microsecond-Scale Networking——论文泛读

SOSP 2023 Paper 论文阅读笔记整理 问题 数据序列化对于许多数据中心应用程序来说至关重要&#xff0c;序列化的主要开销在于数据移动&#xff0c;将应用程序数据移动到数据包中所需的内存拷贝成本高昂。最近的零拷贝API暴露了NIC分散收集功能&#xff0c;增加了将数据移动卸…

vant4的dialog、toast不显示样式记录

使用的是按需加载&#xff0c;就是这个 插件会自动帮我们把组件加载上去&#xff0c;但是对于函数式的组件&#xff0c;比如dialog&#xff0c;toast这样的&#xff0c;就会显示的时候没有样式&#xff0c;类似这样 这是因为没有加载对应插件的样式&#xff0c;需要手动加载进来…

Java:反射 reflection ( 概念+相关类+使用方法)

文章目录 一、反射(reflection)1.概念优点&#xff1a;缺点 2.反射的相关类1.Class类1.**反射机制的起源**2.获得类相关的方法3.获得类中属性的相关方法4.获得类中注解相关的方法5.获得类中构造器相关的方法6.获得类中方法相关的方法 2.获取Class对象的三种方法&#xff1a;1.使…

python--冒泡排序和main函数

1.判断是不是回文数&#xff1a; x int(input("请输入一个正整数&#xff1a;")) x str(x) if x x[::-1]:print("是回文数。") else:print("不是回文数。") 2.冒泡排序 # 冒泡排序: # [30&#xff0c;8&#xff0c;-10&#xff0c; 50&am…

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始&#xff0c;引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device)&#xff0c;这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…

从抛硬币试验看概率论的基本内容及统计方法

一般说到概率&#xff0c;就喜欢拿抛硬币做例子。大多数时候&#xff0c;会简单认为硬币正背面的概率各为二分之一&#xff0c;其实事情远没有这么简单。这篇文章会以抛硬币试验为例子并贯穿全文&#xff0c;引出一系列概率论和数理统计的基本内容。这篇文章会涉及的有古典概型…

后端前行Vue之路(二):模版语法之插值与指令

1.概述 Vue.js的模板语法是一种将Vue实例的数据绑定到HTML文档的方法。Vue的模板语法是一种基于HTML的扩展&#xff0c;允许开发者将Vue实例中的数据绑定到HTML元素&#xff0c;以及在HTML中使用一些简单的逻辑和指令。Vue.js 基于 HTML 的模板语法允许开发者声明式地将 DOM 绑…

eBMC套件固件烧录及上电过程

1 概述 本期讲解 eBMC 套件上电和固件烧录过程。关于 eBMC 套件的开关、接口和芯片位置&#xff0c;可查看前两期文章&#xff0c;里面有详细描述。 2 固件烧录 eBMC 套件烧录涉及以下固件、其芯片位置和烧录口位置&#xff1a; 其中&#xff0c;eBMC-D4 板上固件可…

【嵌入式机器学习开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

ARM-Linux是一种针对ARM架构的操作系统&#xff0c;它的设计目标是在低功耗、低成本的硬件平台上运行。ARM-Linux可以运行在多种ARM处理器上&#xff0c;包括树莓派。 树莓派&#xff08;Raspberry Pi&#xff09;是一款基于ARM架构的单板计算机&#xff0c;由英国的树莓派基金…

Python模糊字符串匹配工具库之fuzzywuzzy使用详解

概要 Python的fuzzywuzzy库是一个强大的模糊字符串匹配工具,基于Levenshtein距离算法,可用于处理文本相似度匹配任务。本文将深入探讨fuzzywuzzy库的各种功能和用法,结合详细的描述和丰富的示例代码,带领大家全面了解这个工具的使用方法和实际应用场景。 安装 在开始使用…

react-navigation

Getting started | React Navigation

python实战之基础篇(一)

1. 注释 # coding utf-8 # 该注释放到文件第一行, 这个注释告诉python解释器该文件的编码集是UTF-82. 导入语句有三种形式 import <模块名> from <模块名> import <代码元素> from <模块名> import <代码元素> as <代码元素别名>3. 获取…

HCIP-Datacom(H12-821)题库补充(3/28)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 如图所示组网&#xff0c;以下关于R4优选路由的描述&#xff0c;正确的是哪一项&#xff1f; A&#xff1a;无法判断&#xff0c;MED不能作为AS之间BGP选路的条件 B&a…

Chakra UI:重塑React组件开发的未来

随着前端开发技术的不断演进&#xff0c;React已经成为了一个不可或缺的开源JavaScript库&#xff0c;用于构建用户界面。然而&#xff0c;虽然React提供了构建用户界面的强大工具&#xff0c;但在组件的可访问性、可重复使用性和可组合性方面仍存在挑战。Chakra UI正是一个为解…

三层交换机可以采用直通交换技术吗?

三层交换机是一种网络设备&#xff0c;它结合了二层交换机的高速数据转发能力和路由器的复杂网络功能&#xff0c;如IP路由、VLAN&#xff08;虚拟局域网&#xff09;支持等。在讨论三层交换机是否可以采用直通交换技术之前&#xff0c;我们先了解一下直通交换技术以及三层交换…

Nuxt3(路由)

说明 Nuxt的核心功能之一是文件系统路由。pages/目录中的每个Vue文件都会创建一个相应的URL&#xff08;或路由&#xff09;&#xff0c;用于显示文件的内容。通过为每个页面使用动态导入&#xff0c;Nuxt利用代码分割来仅加载所需路由的最小量JavaScript。 简单来说&#xf…

SAP中内部订单解锁操作实例

接用户反馈&#xff0c;在进行一笔采购订单收货&#xff08;带内部订单控制&#xff09;时&#xff0c;出现如下图提示。该提示指向内部订单&#xff0c;在本司采购订单中的内部订单用于控制采购预算费用。从提示看应该是订单的状态不对。 事务KO02打开内部订单&#xff0c;找到…