leetcode第48题

简介: 将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。解法一可以先转置,然后把每列对称交换交换一下

image.png

将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。

解法一

可以先转置,然后把每列对称交换交换一下

image.png

publicvoidrotate(int[][] matrix) {
//以对角线为轴交换for (inti=0; i<matrix.length; i++) {
for (intj=0; j<=i; j++) {
if (i==j) {
continue;
            }
inttemp=matrix[i][j];
matrix[i][j] =matrix[j][i];
matrix[j][i] =temp;
        }
    } 
//交换列for (inti=0, j=matrix.length-1; i<matrix.length/2; i++, j--) {
for (intk=0; k<matrix.length; k++) {
inttemp=matrix[k][i];
matrix[k][i] =matrix[k][j];
matrix[k][j] =temp;
        }
    }
}

时间复杂度:O(n²)。

空间复杂度:O(1)。

也可以先以横向的中轴线为轴,对称的行进行交换,然后再以对角线交换。

解法二

我把这个链接的思路贴过来,里边评论有张图也都顺道贴过来吧,写的很好。

image.png

一圈一圈的循环交换,很妙!

publicvoidrotate(int[][] matrix) {
intn=matrix.length;
for (inti=0; i<n/2; i++) 
for (intj=i; j<n-i-1; j++) {
inttmp=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]=tmp;
        }
}

时间复杂度:O(n²)。

空间复杂度:O(1)。

这道题就是对题目的特征进行观察就可以了。


相关文章
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
297 1
【赵渝强老师】Oracle的控制文件与归档日志文件
|
弹性计算 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之集成sls时出现报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
205 0
|
消息中间件 存储 负载均衡
RocketMQ消费者消费消息核心原理(含长轮询机制)
这篇文章深入探讨了Apache RocketMQ消息队列中消费者消费消息的核心原理,特别是长轮询机制。文章从消费者和Broker的交互流程出发,详细分析了Push和Pull两种消费模式的内部实现,以及它们是如何通过长轮询机制来优化消息消费的效率。文章还对RocketMQ的消费者启动流程、消息拉取请求的发起、Broker端处理消息拉取请求的流程进行了深入的源码分析,并总结了RocketMQ在设计上的优点,如单一职责化和线程池的使用等。
RocketMQ消费者消费消息核心原理(含长轮询机制)
|
消息中间件 存储 Kafka
深入Kafka:如何保证数据一致性与可靠性?
**Kafka一致性详解:** 讲解了幂等性如何通过ProducerID和SequenceNumber确保消息唯一,防止重复处理,维持数据一致性。Kafka利用Zookeeper进行控制器和分区Leader选举,应对节点变动,防止脑裂,确保高可用性。实例中,电商平台用Kafka处理订单,保证每个订单仅处理一次,即使在异常情况下。关注微信公众号“软件求生”获取更多技术内容。
2007 0
|
机器学习/深度学习 自然语言处理 语音技术
语音识别技术的原理与应用
语音识别技术的原理与应用
GitHub的PUSH显示网络超时,小乌龟网络代理办法
GitHub的PUSH显示网络超时,小乌龟网络代理办法
519 0
|
JavaScript
js让滚动条滚到底部
js让滚动条滚到底部
425 0
|
机器学习/深度学习 存储 自然语言处理
cs224w(图机器学习)2021冬季课程学习笔记5 Colab 1:Node Embeddings
cs224w(图机器学习)2021冬季课程学习笔记5 Colab 1:Node Embeddings
cs224w(图机器学习)2021冬季课程学习笔记5 Colab 1:Node Embeddings
|
JavaScript 前端开发 安全
【前端面试知识题】- 5. TypeScript
从ECMAScript 2015,也就是ECMAScript 6,JavaScript程序将可以使用这种基于类的面向对象方法。在TypeScript里允许开发者现在就使用这些特性,并且编译后的JavaScript可以在所有主流浏览器和平台上运行,
|
存储 C++ Python
thrift 实战 —— 一个简单的匹配系统(上)
thrift 实战 —— 一个简单的匹配系统(上)
356 0
thrift 实战 —— 一个简单的匹配系统(上)