每日一练:LeeCode-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

方法1:直接循环交换

在这里插入图片描述
它采用了直接交换的方法通过循环对矩阵的每一个环进行旋转

class Solution {public void rotate(int[][] matrix) {int length = matrix.length; // 获取矩阵的长度// 遍历矩阵的每一个环for (int i = 0; i < length / 2; i++) { // 计算需要旋转的大圈数for (int j = i; j < length - i - 1; j++) { // j < length - i - 1:确定需要旋转的每 4 个数的小圈数int temp = 0;int m = length - i - 1; // m,n 确定 matrix[i][j] 外,其他数的相对位置int n = length - j - 1;// 结合图实际比对,对应位置互换temp = matrix[i][j];matrix[i][j] = matrix[n][i];matrix[n][i] = matrix[m][n];matrix[m][n] = matrix[j][m];matrix[j][m] = temp;}}}
}

这个函数接受一个二维矩阵 matrix 作为输入,并且直接对该矩阵进行原地修改,使其顺时针旋转 90 度。函数使用了两层循环来遍历矩阵的每一个环,然后对每一个环中的元素进行交换。
具体地,外层循环 i 表示需要旋转的大圈数,内层循环 j 表示当前需要旋转的小圈数。在内层循环中,通过计算得到需要交换的四个位置的坐标,然后将它们对应位置上的元素进行交换。

这种算法的时间复杂度为 O(n^2),其中 n 是矩阵的边长。因为对于一个 n x n 的矩阵,需要旋转的环的数量是 n/2,每个环中有 4 个元素需要交换,所以总的操作次数为 4 * n/2 * n/2 = 2n^2。

方法2:先上下交换,在对角线交换(最容易理解)

在这里插入图片描述

将一个二维矩阵顺时针旋转 90 度。它分两步进行旋转:先进行上下交换,然后进行对角线交换。

class Solution {public void rotate(int[][] matrix) {int length = matrix.length;// 先上下交换for (int i = 0; i < length / 2; i++) {int[] temp = matrix[i];matrix[i] = matrix[length - i - 1]; // 注意 length - i - 1:需要变化,往上移matrix[length - i - 1] = temp;}// 再对角线交换for (int i = 0; i < length; i++) {for (int j = i + 1; j < length; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}}
}

这个函数接受一个二维矩阵 matrix 作为输入,并且直接对该矩阵进行原地修改,使其顺时针旋转 90 度。

  • 首先,外层循环遍历了矩阵的上半部分,通过交换每一行与对称位置的行,实现了上下交换。
  • 接着,内层循环遍历了矩阵的对角线上半部分(左上角到右下角的对角线),通过交换对角线两侧的元素,实现了对角线交换。

这种算法的时间复杂度为 O(n^2),其中 n 是矩阵的边长。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java认识泛型类

一、包装类 认识泛型类之前先来认识一下包装类 1、基本数据类型和对应的包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 除了 Integer 和 Character&#xff0…

学点Java_Day12_JDBC

1 JDBC 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet&#xff0c;每个数据库厂商实现了这套接口&#xff0c;例如MySql公司实现了&#xff1a;MySql驱动程序里面实现了这套接口&#xff0c;Java程序员只要调用实现了这些方法就可以…

自动化测试 —— Pytest fixture及conftest详解

前言 fixture是在测试函数运行前后&#xff0c;由pytest执行的外壳函数。fixture中的代码可以定制&#xff0c;满足多变的测试需求&#xff0c;包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在&#xff0c;类似u…

智能设备控制概念及方式详解

设备控制 随着物联网设备的普及&#xff0c;如何让用户或者企业安全、灵活地控制和管理设备变得更加重要。因此&#xff0c;便有了设备控制、群组管理、智能场景、多控关联、定时任务等概念。本文主要讲解移动端应用涉及的物联网设备控制相关概念及方式方法。 在以往简单的应…

快速上手Spring Cloud 十五:与人工智能的智慧交融

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

专题:一个自制代码生成器(嵌入式脚本语言)之应用实例

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;一个自制代码…

HTTP

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

Redis中的客户端(三)

客户端 身份验证 客户端状态的authenticated属性用于记录客户端是否通过了身份验证: typedef struct redisClient {// ...int authenticated;// ... } redisClient;如果authnticated的值为0&#xff0c;那么表示客户端未通过身份验证&#xff1b;如果authenticated的值为1&a…

目标检测+车道线识别+追踪

一种方法&#xff1a; 车道线检测-canny边缘检测-霍夫变换 一、什么是霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是一种在图像处理和计算机视觉中广泛使用的特征检测技术&#xff0c;主要用于识别图像中的几何形状&#xff0c;尤其是直线、圆和椭圆等常见形状…

Ubuntu20.04安装OpenCV并在vsCode中配置

1. 安装OpenCV 1.1 安装准备&#xff1a; 1.1.1 安装cmake sudo apt-get install cmake 1.1.2 依赖环境 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev sudo apt-get install libgtk2.0-d…

通过WSL在阿里云上部署Vue项目

参考&#xff1a; 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统&#xff0c;还有其他的进入方式。 选择ubuntu系统&#xff08;和WSL使用相同的系统&#xff09;。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…

PS从入门到精通视频各类教程整理全集,包含素材、作业等

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 【Photoshop 教程】史上最容易听懂的PS...在最后四…