48. 旋转图像

题目链接:力扣

解题思路:找规律,matrix[x][y] 旋转90度后的位置为 matrix[y][n-x-1]

解法一:使用额外的矩阵result保存旋转后的图像,则新矩阵中的元素与原矩阵的对应关系为result[y][n-x-1] =matrix[x][y],最后再将result复制到matrix中就可以了

AC代码:

class Solution {public static void rotate(int[][] matrix) {int n = matrix.length;int [][] result = new int[n][n];for (int x = 0; x < n; x++) {for (int y = 0; y < n; y++) {result[y][n-x-1] =matrix[x][y];}}for (int i = 0; i < n; i++) {System.arraycopy(result[i], 0, matrix[i], 0, n);}}
}

上述解法借助了一个额外的矩阵,题目要求必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。接下来原地旋转图像的解题思路如下:

解法2:原地旋转

还是找规律:matrix[y][n-x-1]=matrix[x][y],

  1. 因为matrix[x][y]旋转后的位置为matrix[y][n-x-1],即matrix[y][n-x-1]=matrix[x][y],但是这样会把matrix[y][n-x-1]给覆盖掉,可以使用一个临时变量tem保存matrix[y][n-x-1],然后把tem放入正确的位置,然后再把tem覆盖的位置的哪个元素放入正确的位置,然后... ,4个元素是一轮
    1. tem=matrix[y][n-x-1](保存被覆盖的元素)
    2. matrix[y][n-x-1]=matrix[x][y]
  2. 把上一步保存的matrix[y][n-x-1]放入正确的位置
    1. tem=matrix[n-x-1][n-y-1]
    2. matrix[n-x-1][n-y-1]=matrix[y][n-x-1]
  3. 把上一步保存的matrix[n-x-1][n-y-1]放入正确的位置
    1. tem=matrix[n-y-1][x]
    2. matrix[n-y-1][x]=matrix[n-x-1][n-y-1]
  4. 把上一步保存的matrix[n-y-1][x]放入正确位置
    1. tem=matrix[x][y] ,这里又重新回到matrix[x][y],完成一轮转换
    2. matrix[x][y]=matrix[n-y-1][x]
  5. 上述8个等式可以合并为下面几个等式
    1. tem=matrix[x][y]
    2. matrix[x][y]=matrix[n-y-1][x]
    3. matrix[n-y-1][x]=matrix[n-x-1][n-y-1]
    4. matrix[n-x-1][n-y-1]=matrix[y][n-x-1]
    5. matrix[y][n-x-1]=tem
  6. 这样就可以在一轮循环中一次性完成四个元素的修改,然后需要确定枚举哪些元素:
    1. 当 n 为偶数时,需要枚举 n^2/4 个位置,也就是左上角的(n/2)* (n/2)的小正方形
    2. 当 n 为奇数时,中心的哪个元素不改变位置,需要枚举 (n^2-1)/4个位置,也就是((n-1)/2) * ((n+1)/2)个位置,也就是左上角的 ((n+1)/2) * ((n-1)/2) 的长方形

枚举上述这些位置,就可以将所有元素旋转,因为每次枚举,都会更新4个元素的位置

AC代码:

class Solution {public static void rotate(int[][] matrix) {int n = matrix.length;for (int x = 0; x < n/2; x++) {for (int y = 0; y < (n+1)/2; y++) {int tem=matrix[x][y];matrix[x][y]=matrix[n-y-1][x];matrix[n-y-1][x]=matrix[n-x-1][n-y-1];matrix[n-x-1][n-y-1]=matrix[y][n-x-1];matrix[y][n-x-1]=tem;}}}
}

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

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

相关文章

IDEA+springboot + ssm +shiro+ easyui +mysql实现的进销存系统

IDEAspringboot ssm shiro easyui mysql实现的进销存系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.首页3.修改密码4.系统日志5. 用户管理6. 角色管理7. 进货入库8.退货出库9.进货单据查询10.退货单据查询11.当前库存查询12.销售出库13.客户退货14. 销售单据查询15…

hydra详解(仅供学习参考)

一、概述。 Hydra是一款非常强大的渗透工具&#xff0c;由著名的黑客组织THC开发的一款开源工具。 二、使用方法。 hybra基础语法&#xff1a; hydra 参数 IP 服务 参数&#xff1a; -l login 小写&#xff0c;指定用户名进行破解 -L file 大写&#xff0c;指定用户的用户名…

小程序主包超1.5MB分包处理流程优化方案

"subPackages": [// 分包1 {"root": "src, // 根目录"pages": [{"path": "views/business/index", // 页面路径"name": "business_index","aliasPath": "/business/index",&…

性能测试的定义和基本概念

1.性能测试的定义: 测试人员借助性能测试工具&#xff0c;模拟系统在不同的场景下&#xff0c;对应的性能指标是否达到预期 2.性能测试和功能测试的区别: 功能测试:依靠人工执行 性能测试:依靠工具完成 功能测试:不管在什么场景下&#xff0c;只要能够正常就可以 性能测…

群晖NAS:docker查询注册表失败解决方案 docker安装网心云、mysql等

群晖NAS&#xff1a;docker查询注册表失败解决方案 差不多2023年4月底开始的&#xff0c;docker内不能直接搜索注册表。据说是有人在库里放了一些有意思的东西&#xff0c;被和谐掉了&#xff0c;所以也别指望什么时候能解封。 网上很多案例&#xff0c;都不能用。还有奇葩的…

开发工具篇第25讲:阿里云MFA绑定Chrome浏览器Authenticator插件

开发工具篇第25讲&#xff1a;阿里云MFA绑定Chrome浏览器Authenticator插件 本文是开发工具篇第25讲&#xff0c;登录阿里云旗下产品时&#xff0c;需要使用mfa登录&#xff0c;每次如果要用手机看mfa码很麻烦&#xff0c; Chrome浏览器提供了一个快捷的登录方法&#xff0c;可…

汽车应用级MS35774/MS35774A低噪声 256 细分微步进电机驱动

MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片&#xff0c;芯片内置功率MOSFET &#xff0c;长时间工作的平均电 流可以达到 1.4A &#xff0c;峰值电流 2A 。芯片集成了过温保护、欠压 保护、过流保护、短地保护、短电源保护功能。 主要特点 ◼ 2 相步进…

HTML学习 第一部分(前端学习)

参考学习网站: 网页简介 (w3schools.com) 我的学习思路是&#xff1a;网站实践视频。 视频很重要的&#xff0c;因为它会给你一种开阔思路的方式。你会想&#xff0c;噢&#xff01;原来还可以这样。这是书本或者网站教程 所不能教给你的。而且&#xff0c;对一些教程&#…

驱动程序设计 驱动程序函数、驱动控制LED闪烁 7.7

驱动函数 .read() .write() ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);驱动程序 /** 文件名称&#xff1a;mod.c* 创 建 者: memories* 创建日期&#xff1a;2023…

CAN转EtherNet/IP网关ethernet/ip协议

JM-EIP-CAN 是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是将各种 CAN 总线和 ETHERNET/IP 网络连接起来。 本网关连接到 ETHERNET/IP 总线中做为从站使用&#xff0c;连接到 CAN 总线中根据节点号进行读写。 技术参数 ETHERNET/IP 技术参数 网关做为 E…

快速构建一个 GitLab + Jenkins + Harbor 的云原生 DevOps 环境

今天我们要搭建一条怎样的工具链呢&#xff1f;且看效果图&#xff1a; GitLab Jenkins Harbor Toolchain Workflow 首先我们需要完成 GitLab、Jenkins 和 Harbor 三个工具的部署&#xff1b; 接着我们需要在 GitLab 上创建一个代码库&#xff0c;并且在 Jenkins 上创建相应…

38. QT在工控机Linux系统上调试机器人注意事项

1. QtCreator项目编译目录问题 当使用QtCreator创建一个新项目之后,对于代码编译产生的最终文件保存路径一般也会确定下来,QtCreator会帮助我们在同级目录下创建保存路径。例如下图:带有蓝色框的文件夹为项目源码,左侧的文件夹即为项目编译后产生的文件夹 如果在某种情况…