Leetcode48 旋转图像

news2024/12/28 18:16:53

给定一个 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]]

 解题思路

1、由观察可知,将原图像顺时针选择90度,等价于a、将矩阵沿对角线翻转。b、再将矩阵沿中心轴翻转

如下所示的图像

a、沿着对角线翻转之后

 

b、沿着中心轴翻转之后 

 

Java代码

class Solution {
    public void rotate(int[][] matrix) {
        // 获取矩阵的长和宽
        int m = matrix.length;
        int n = matrix[0].length;
        for(int i=0; i<m; i++){
            for(int j=i+1; j<n; j++){
                swap(matrix, i, j, j, i);
            }
        }
        for(int[] row:matrix){
            revserRow(row);
        }
    }

    // 函数功能,交换矩阵中的两个数grid[x0][y0] -> grid[x1][y1]
    // grid[x1][y1] -> grid[x0][y0]
    public void swap(int[][]matrix, int x0, int y0, int x1, int y1){
        int tmp = matrix[x0][y0];
        matrix[x0][y0] = matrix[x1][y1];
        matrix[x1][y1] = tmp;
    }

    // 函数功能:交换同一行中的两个数
    // row[i] -> row[j], row[j] -> row[i]
    public void swap(int[]row, int i, int j){
        int tmp = row[i];
        row[i] = row[j];
        row[j] = tmp;
    }

    // 函数功能:颠倒某一行
    // [1, 2, 3, 4] -> [4, 3, 2, 1]
    public void revserRow(int[] row){
        for(int i=0; i<row.length / 2; i++){
            swap(row, i, row.length-i-1);
        }
    }
}

 

Python代码

class Solution(object):
    def rotate(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """
        # 获取矩阵的长和宽
        m = len(matrix)
        n = len(matrix[0])
        for i in range(m):
            for j in range(i+1, n):
                self.swap2(matrix, i, j, j, i)
        for row in matrix:
            self.reverseRow(row)
    
    # 函数功能,交换矩阵中的两个数grid[x0][y0] -> grid[x1][y1]
    # grid[x1][y1] -> grid[x0][y0]
    def swap2(self, matrix, x0, y0, x1, y1):
        tmp = matrix[x0][y0]
        matrix[x0][y0] = matrix[x1][y1]
        matrix[x1][y1] = tmp
      
    # 函数功能:交换同一行中的两个数
    # row[i] -> row[j], row[j] -> row[i]
    def swap(self, row, i, j):
        tmp = row[i]
        row[i] = row[j]
        row[j] = tmp
      
    # 函数功能:颠倒某一行
    # [1, 2, 3, 4] -> [4, 3, 2, 1]
    def reverseRow(self, row):
        for i in range(0, len(row) / 2):
            self.swap(row, i, len(row) - i - 1)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZYNQ——按键消抖实验

文章目录 原理简介软件仿真板上验证 原理简介 按键作为基本的人机输入接口&#xff0c;在很多电子设计中都是比较常见的&#xff0c;但是由于其机械特性&#xff0c;在按键按下或者松开的时候&#xff0c;按键的输入值是有抖动的。按键的抖动是其固有特性&#xff0c;因此无论…

打死也不要进外包,来看看我在腾讯外包的这2年......

我18年毕业于一个普通二本学校&#xff0c;是一个很不出名的小本科。大学期间专业知识也没有去认真的学习&#xff0c;所以毕业的时候就随便找了一份工作&#xff0c;在一个小公司做功能测试。 记得那时候薪资大概是6k左右&#xff0c;因为是在工厂&#xff0c;工作环境很差&a…

Gitlab 访问令牌更新 替换

引言 访问令牌到期后如何丝滑更换&#xff0c;或则如何更改账户的访问令牌实现权限变动呢&#xff1f;在我们使用访问令牌克隆项目之后&#xff0c;Windows凭据就帮我们记录下了密码。当然密码是不可见的&#xff0c;只能进行删除重新设置&#xff0c;通过凭据管理器进行更改。…

python基于预训练大模型权重实现文本向量化开发构建微博评论数据情感极向识别模型

因为最近的一些项目涉及到了大模型相关的技术开发研究&#xff0c;在我前面的博文中也已经有一些实践记录学习资料分享的文章了&#xff0c;今天是在做模型训练的时候突然想到一个有意思的想法&#xff0c;按照我之前做文本分类的方法&#xff0c;基本主流的技术路线都是先对文…

性能提升571%,32K超长上下文,推理速度提升42%,允许商用,国产开源大模型推出了二代 ChatGLM2-6B...

6月份是火热的夏天&#xff0c;各种火热的 AI 产品也在密集的更新&#xff0c;天越热&#xff0c;大家是干得热火朝天&#xff0c;卷出了新高度。 前有现在大火的 ChatGPT&#xff0c;ChatGPT 更新&#xff1a;大杀器&#xff01;函数调用示范&#xff0c;ChatGPT 3.5/4 双双升…

Java Web JDBC(2)23.6.26

3.6 PreparedStatement PreparedStatement作用&#xff1a; 预编译SQL语句并执行&#xff1a;预防SQL注入问题 3.6.1 代码模拟SQL注入问题 Test public void testLogin() throws Exception {//2. 获取连接&#xff1a;如果连接的是本机mysql并且端口是默认的 3306 可以简化书…

浅谈无线温度监测系统在冶炼厂供配电的应用

安科瑞 华楠 摘要&#xff1a;高压供配电系统运行稳定性与电气元器件连接点温度密切相关&#xff0c;通过与传统测温方法对比&#xff0c;实时在线无线温度监测解决 了密封高压开关柜内部各连接点温度无法检测的难题&#xff0c;满足了供电系统安全稳定运行的要求&#xff0c;降…

redis 主从复制 哨兵 安装部署

学习开始前先了解一下 Redis是一个开源的内存数据结构存储系统&#xff0c;它支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合、有序集合等。Redis最大的特点是数据存储在内存中&#xff0c;因此读写速度非常快&#xff0c;同时也支持数据持久化&#xff0c;可以将数…

吐血整理,接口自动化测试-Config配置文件框架封装(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 configparser的介…

阿里巴巴2023最新版Spring Security王者晋级文档

Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 是 Spring 家族中的一个安全管理框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。在用户认证方面&#xff0c;Spring Security 框架支持主流的认证方式&#xff0c;包括 HTTP 基本认证、HTTP 表单…

输出一个数的十六进制表示

可以使用Integer.toHexString、Long.toHexString得到数值的十六进制表示。 下面的代码示例列出了几种情况&#xff1a; public class Test5 {public static void main(String[] args) {byte b1 0b01101111; System.out.println(Integer.toHexString(b1).toUpperCase());byte…

深度学习的实践层面

目录 1、训练、验证、测试集 2、偏差、方差 3、正则化 4、dropoout正则化 5、其他正则化方法 6、归一化输入 7、梯度消失和梯度爆炸 8、梯度的数值逼近 9、梯度检验 1、训练、验证、测试集 &#xff08;1&#xff09;、早期机器学习领域普遍认可的最好的实践方法&…

海兰一体机电脑U盘重装Win10系统教程图解

海兰一体机电脑是全家人都适用的电脑&#xff0c;使用海兰一体机电脑的用户要怎么用U盘来重装Win10系统&#xff0c;首先用户需要确保电脑能够正常联网&#xff0c;然后再准备一个8G以上的U盘&#xff0c;最后根据小编分享的海兰一体机电脑U盘重装Win10系统教程图解操作即可。 …

PR脚本:音乐鼓点自动节拍打点标记动画BeatEdit

BeatEdit可检测音乐中的节拍并在Premiere Pro时间轴中为其生成标记。可以创建与音乐同步的自动编辑&#xff0c;或者让BeatEdit v2.0.006 激活版协助您进行手动编辑过程。BeatEdit mac版使用节拍信息来生成与音乐同步的全自动编辑。如果需要更多控制&#xff0c;拍子标记也可以…

视唱音准不好的人能练好吗,视唱音准不好怎么办

软件版本&#xff1a;Earmaster7.3.6 无论是普通人还是声乐艺术生&#xff0c;音准是唱好歌的必要条件之一&#xff0c;如果音准不好&#xff0c;唱歌自然会跑调。然而并不是所有人天生都有十分出色的音准&#xff0c;如果不进行后天的训练&#xff0c;是很难找到正确的音准的…

web应用封装成app|超级签名

PP封装是形成APP的最省钱的一种方式。你只需要拥有一个网址就可以通过一些技术处理封装成一个跨iOS和Android的APP&#xff0c;这个过程往往只需要几分钟。在移动互联网时代&#xff0c;拥有一个移动端APP是必不可少的。那么APP是怎样封装的呢&#xff1f; 首先让我们先来了解…

基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】

功能演示 摘要&#xff1a;面部表情识别&#xff08;Facial Expression Recognition&#xff09;是一种通过技术手段识别人物图像中人脸面部表情的技术。本文详细介绍了其实现的技术原理&#xff0c;同时给出完整的Python实现代码、训练好的深度学习模型&#xff0c;并且通过Py…

Python中的四种条件语句结构和应用举例

Python中的四种条件语句结构和应用举例 条件语句是计算机实现分类高效执行计算的重要方法。在许多计算机语言编写&#xff08;C语言&#xff0c;Java语言&#xff0c;matlab语言等&#xff09;的时候&#xff0c;都有涉及条件语句的部分&#xff0c;本文对Python语言中的条件语…

Docker操作镜像与容器常用命令

Docker操作镜像与容器的常用命令 文章目录 Docker操作镜像与容器的常用命令前言1、镜像相关命令1.1 查看镜像1.2 搜索镜像1.3 拉取镜像1.4 删除镜像 2 容器相关命令2.1 查看容器2.2 创建与启动容器2.3 停止与启动容器2.4 文件拷贝2.5 目录挂载2.6 查看容器IP地址2.7 删除容器 总…

金山云联合MiniMax推出MaaS互信推理专区方案 解决大模型与数据互信难题

作为人工智能领域颇具里程碑式的进展&#xff0c;ChatGPT以其惊艳的表现&#xff0c;迅速掀起了行业热潮&#xff0c;使得大模型成为当下最为炙手可热的技术方向之一。但在大模型落地过程中&#xff0c;如何既能保障大模型使用方的数据安全&#xff0c;又能保护大模型提供方的部…