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

Leetcode JAVA刷刷站(48)旋转图像

一、题目概述

二、思路方向

       要在原地顺时针旋转一个 n x n 的二维矩阵 90 度,你可以通过一系列交换操作来实现。这里的关键在于理解旋转后的矩阵与原矩阵之间的元素对应关系。

       假设原矩阵为 matrix,其中 matrix[i][j] 表示第 i 行第 j 列的元素。旋转 90 度后,matrix[i][j] 的新位置变为 matrix[j][n-1-i]

       由于要原地旋转,我们不能直接按这个关系来赋值,因为这会导致原始数据丢失。相反,我们可以使用一种“层”的概念,从外向内逐层交换元素。每一层包含四个边(两个行边和两个列边),我们按顺时针方向交换这四个边上的元素。

三、代码实现  

public class Solution {  public void rotate(int[][] matrix) {  int n = matrix.length;  // 先沿对角线翻转矩阵  for (int i = 0; i < n; i++) {  for (int j = i; j < n; j++) {  int temp = matrix[i][j];  matrix[i][j] = matrix[j][i];  matrix[j][i] = temp;  }  }  // 然后反转每一行  for (int i = 0; i < n; i++) {  int left = 0, right = n - 1;  while (left < right) {  int temp = matrix[i][left];  matrix[i][left] = matrix[i][right];  matrix[i][right] = temp;  left++;  right--;  }  }  }  
}

执行结果: 

四、小结

       这个解决方案首先将矩阵沿对角线翻转(即交换 matrix[i][j] 和 matrix[j][i]),然后反转每一行。这两步操作结合起来,就实现了矩阵的顺时针 90 度旋转。

       这种方法的时间复杂度是 O(n^2),其中 n 是矩阵的边长,因为我们需要访问矩阵中的每个元素两次(一次是对角线翻转,一次是行反转)。空间复杂度是 O(1),因为我们是在原地修改矩阵,没有使用额外的空间(除了几个用于交换的临时变量)。

 结语  

在这喧嚣的世界里

找到一片属于自己的宁静之地

让心灵得以栖息

!!!

相关文章:

Leetcode JAVA刷刷站(48)旋转图像

一、题目概述 二、思路方向 要在原地顺时针旋转一个 n x n 的二维矩阵 90 度&#xff0c;你可以通过一系列交换操作来实现。这里的关键在于理解旋转后的矩阵与原矩阵之间的元素对应关系。 假设原矩阵为 matrix&#xff0c;其中 matrix[i][j] 表示第 i 行第 j 列的元素。旋转 90…...

编译型语言和解释型语言

年代区分 从硬件技术和软件需求&#xff0c;计算机发展初期&#xff0c;没有可能发展真正的解释型语言&#xff0c;运行速度和内存都受限&#xff0c;只有给机器喂二进制代码才能勉强跑起来。但事实上&#xff0c;解释型语言却在计算机发展很早的时期曾经出现过&#xff0c;当…...

TensorRT 和 PyTorch区别

一、TensorRT 和 PyTorch TensorRT 和 PyTorch 是两个不同的深度学习工具&#xff0c;虽然它们可以用于处理相同类型的任务&#xff0c;但它们的用途、特点和设计目标有所不同。 TensorRT 简介 TensorRT 是 NVIDIA 开发的一款高性能深度学习推理引擎&#xff0c;主要用于优化…...

iOS 17.6.1版本重发,修复高级数据保护错误

今日&#xff0c;苹果没有带来iOS 17.6.2的更新&#xff0c;而是重新发布了iOS 17.6.1版本&#xff0c;本次升级版本号为21G101&#xff0c;高于第一版的21G93。距离初版发布相隔一周半时间。 在 iOS / iPadOS 17.6.1 的更新日志&#xff0c;苹果公司写道&#xff1a;“此更新包…...

【排序算法】八大排序(上)(c语言实现)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;算法 目录 前言 写一串测试数据 交换两元素的函数 一、冒泡排序 二、选择排序 三、插入排序 四、希尔排序 程序全部代码 总结 前言 排序算法是计算机科…...

Python版《超级玛丽+源码》-Python制作超级玛丽游戏

小时候最喜欢玩的小游戏就是超级玛丽了&#xff0c;有刺激有又技巧&#xff0c;通关真的很难&#xff0c;救下小公主还被抓走了&#xff0c;唉&#xff0c;心累&#xff0c;最后还是硬着头皮继续闯&#xff0c;终于要通关了&#xff0c;之后再玩还是没有那么容易&#xff0c;哈…...

互联网私有IP地址列表

最近因为业务需要&#xff0c;要判断用户的IP是否私有IP&#xff0c; 以前知道的私有IP&#xff0c;基本上只有如下几个(注意&#xff1a;这不是正确答案)&#xff1a; 10.0.0.0/8&#xff08;10.0.0.0-10.255.255.255&#xff09;172.16.0.0/12&#xff08;172.16.0.0-172.31…...

光伏项目管理软件为什么那么多光伏人在用?

在光伏行业迅速发展的今天&#xff0c;光伏项目管理软件已成为众多光伏从业者不可或缺的得力助手。那么&#xff0c;为何这款软件能够受到如此广泛的青睐和应用呢&#xff1f; 一、提高项目管理效率 光伏项目管理软件通过数字化、智能化的手段&#xff0c;对光伏项目的各个环节…...

《AOP实战》— 自定义注解

承接上文&#xff08;传送门 —>《面试必考》 — AOP-CSDN博客&#xff09;&#xff0c;在被面试官拷打的时候&#xff0c;会被问到一个致命问题&#xff1a;“你了解aop吗&#xff1f;有具体的使用经验吗&#xff1f;” 你&#xff1a;......... 言尽于此&#xff0c;此篇…...

微前端架构下的单页应用实现策略

随着Web应用的复杂性日益增加&#xff0c;传统的多页应用&#xff08;MPA&#xff09;模式已经难以满足现代Web开发的需求。单页应用&#xff08;SPA&#xff09;以其流畅的用户体验和高效的页面加载速度&#xff0c;逐渐成为Web开发的主流模式。然而&#xff0c;在微前端架构下…...

JWT(JSON Web Token)工作原理及特点

JWT定义 概念&#xff1a;JWT是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络上安全传输信息&#xff0c;常用于身份验证。比喻&#xff1a;类似于电子通行证&#xff0c;包含用户身份信息&#xff0c;用于身份验证和享受服务。 JWT组成部分 头部&am…...

【体检】程序人生之健康检查,全身体检与预防疫苗,五大传染病普筛,基因检测等

程序员养生指南之 【体检】程序人生之健康检查&#xff0c;全身体检项目分类&#xff0c;五大传染病普筛&#xff0c;基因检测等 文章目录 一、全身体检与预防疫苗&#xff08;年检&#xff09;1、实验室检测&#xff1a;生化全套检查2、医技检查&#xff1a;辅助诊疗科室3、科…...

汇编语言中的指令锁定:解锁高效并发编程

标题&#xff1a;汇编语言中的指令锁定&#xff1a;解锁高效并发编程 在汇编语言的微观世界中&#xff0c;指令锁定&#xff08;Instruction Locking&#xff09;是一种确保数据一致性和操作原子性的关键机制。通过使用特定的lock前缀&#xff0c;开发者可以告诉CPU在执行多处…...

《人工智能时代:金融投资决策的潜在系统性风险及防范策略》

在当今数字化飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;在金融领域的应用日益广泛&#xff0c;特别是在投资决策方面展现出了巨大的潜力。然而&#xff0c;随着其影响力的不断扩大&#xff0c;我们也必须警惕潜在的系统性风险。 人工智能在金融投资决策中…...

MT7621+MT7915(MT7905)+MT7975 (W7621A6G-SDK)编译固件与升级固件方法

一、搭建开发环境&#xff0c;编译固件。 1、安装在Ubuntu 14.04.5 x86_64系统后&#xff0c;然后安装下面命令行。 $ sudo apt-get install git g make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim zlibc zlib1g zlib1g…...

[php:\\filter]

写入 #题目 <?php $filename$_GET[filename]; $content$_POST[content]; file_put_contents($filename,<?php exit();.$content); highlight_file(__FILE__); ?> 源码如上&#xff0c;需要再服务器上写入一句话木马 payload如下&#xff1a; #<?php phpinf…...

Linux-环境变量

文章目录 第6章 Linux 环境变量6.1 环境变量简介&#xff1f;6.2 全局变量6.3 局部环境变量6.4 设置用户自定义变量6.4.1 设置局部用户自定义变量6.4.2 设置全局环境变量6.4.3 删除环境变量 6.5 默认的shell环境变量6.6 设置PATH环境变量6.7 定位系统环境变量6.7.1 登录shell6.…...

DISCUZ论坛中 “阅读权限10“这几个字的修改教程以及后台目录路径修改后的管理路径

第一篇&#xff1a;修改“阅读权限10”这几个字 首先找到目录&#xff1a; source\language\lang_message.php 找到这个文件 查找&#xff1a; thread_nopermission 首发地址&#xff1a;玖毅论坛 第二篇&#xff1a;后台管理路径 看到好多人在网上问discuz管理路径怎么…...

springboot 整合spring-boot-starter-data-elasticsearch

依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> 配置 spring:elasticsearch:rest:uris: "http://localhost:9200" # Elastics…...

Element UI中el-dialog作为子组件如何由父组件控制显示/隐藏~

1、这里介绍的是将el-dialog作为组件封装便于复用&#xff0c;如何通过父组件控制子组件dialog的显示与隐藏。 2、思路:首先el-dialog是通过dialogVisible的值是否为true或false来控制显示与隐藏的。那么我们可以通过父传子props来将true&#xff08;即showFlag的值&#xff0…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...