hot20-旋转图像

news2024/12/23 19:13:09

leetcode原题链接:旋转图像

题目描述

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

解题方法: 先上下对称翻转,再主对角线翻转。

可以观察旋转前后相同数字前后位置变化,找到翻转规律: 

先上下翻转: a[i][j] => a[n - 1 - i][j]

再主对角线翻转(即ij位置互换): a[n - 1 - i][j]=> a[j][n - 1 - i]

所以,a[i][j]翻转后的位置变为a[j][n - 1 - i]

a[0][0] ==> a[0][2].     a[0][1] ==> a[1][2].      a[0][2] ==> a[2][2]

a[1][0] ==> a[0][1].    a[1][1] ==> a[1][1].      a[1][2] ==> a[2][1]

a[2][0] ==> a[0][0].     a[2][1] ==> a[1][0].     a[2][2] ==> a[2][0] 

C++代码

#include <iostream>
#include <vector>
#include <algorithm>
class Solution {
public:
    void rotate(std::vector<std::vector<int>>& matrix) {
        int n = matrix.size(); //n行
        int m = matrix[0].size(); //m列
        // 先上下翻转(通过交换元素的方式)
        for (int i = 0; i < n / 2; i++) {
            for (int j = 0; j < m; j++) {
                std::swap(matrix[i][j], matrix[n - 1 -i][j]);
            }
        }
        // 再沿着主对角线翻转(x,y)==>(y,x)
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) { // i = j,落在主对角线上,但是主对角线上的元素不需要交换
                std::swap(matrix[i][j], matrix[j][i]);
            }
        }
    }
};

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

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

相关文章

OpenCV 学习笔记(C++)(1.4W字)

一切图像皆Mat OpenCV中图像对象的创建与复制 Mat基本结构 Mat对象数据组成&#xff1a;头部和数据部分&#xff0c;头部存储图像的属性&#xff08;大小、宽高、图像类型&#xff1a;浮点数类型、字节类型、16位整型、32位整型、双精度浮点型&#xff0c;通道数量和获取途径…

【半监督图像分类 2022 CVPR 】Semi-ViT

【半监督图像分类 2022 CVPR 】Semi-ViT 论文题目&#xff1a;Semi-supervised Vision Transformers at Scale 中文题目&#xff1a; 论文链接&#xff1a;https://arxiv.org/abs/2208.05688 论文代码&#xff1a;https://github.com/amazon-science/semi-vit 发表时间&#xf…

数据结构07:查找[C++][平衡二叉排序树AVL]

图源&#xff1a;文心一言 考研笔记整理1w字&#xff0c;小白友好、代码可跑&#xff0c;请小伙伴放心食用~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、写BUG、画导图、画配图~&#x1f9e9;&#x1f9e9; 参考用书&#xff1a;王道考研《2024年 数据结构考研复习…

Linux 超级漂亮的 Shell

先来一张美图 zsh 介绍 1 Linux shell Linux/Unix 提供了很多种 Shell&#xff0c;为毛要这么多 Shell&#xff1f; 难道用来炒着吃么&#xff1f;那我问你&#xff0c;你同类型的衣服怎么有那么多件&#xff1f;花色&#xff0c;质地还不一样。写程序比买衣服复杂多了&#xf…

在vite+vue3中使用less

目录标题 一、首先&#xff0c;安装插件二、在 vite.config.js中配置三、最后在模版里声明css类型 一、首先&#xff0c;安装插件 npm install less npm install less-loader二、在 vite.config.js中配置 css: {preprocessorOptions: {less: {math: "always", // 括…

VS里拉取时候,变成变基中,变成分离分支状态,git 头指针分离于 baf67ff

分离头指针&#xff08;detached HEAD&#xff09; 通常&#xff0c;我们工作在某一个分支上&#xff0c;比如 master 分支。这个时候 master 指针和 HEAD 指针是一起前进的&#xff0c;每做一次提交&#xff0c;这两个指针就会一起向前挪一步。但是在某种情况下&#xff08;例…

docker搭建达梦数据库

搭建达梦数据库 搭建达梦数据库 拉取镜像 # 拉取镜像 docker pull registry.cn-shanghai.aliyuncs.com/techerwang/dbhub:jem_dm8 或去官网下载 https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html我是选择了去官网下载 然后上传到linux服务器 do…

Selenium教程__按钮的点击、文本框的输入和清除操作(3)

from selenium import webdriverdriver webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com")# 定位元素 input_box driver.find_element_by_id("kw") search_btn driver.find_element_by_id("su")# sen_keys&a…

pycharm修改文件大小限制

场景&#xff1a; 方法&#xff1a; 打开pycharm 安装目录下的idea.properties 增加配置项&#xff1a;idea.max.intellisense.filesize99999

电脑word如何转化为pdf格式,其实非常简单!

作为一名在职场工作多年的资深达人&#xff0c;我们都知道工作中常常需要转换各种文件格式&#xff0c;其中最常见的就是Word文档和PDF文档。有时候根据领导、客户或甲方的要求&#xff0c;我们需要进行格式转换&#xff0c;尤其是将Word转换为PDF格式。PDF格式的文件不仅方便阅…

Spring基础知识(四)

目录 1.Spring包含的模块主要有什么 2.Core Container的作用 3.Data Access/Integration模块的作用 4.AOP模块的作用 5.Spring Web模块的作用 6.Test模块的作用 7.如何将一个类声明为Bean 8.Component和Bean的区别 9.能够注入Bean的注解有什么 10.Resource注解 1.Spr…

【Java】Java 中格式化字符串:String.format() 方法

本文仅供学习参考&#xff01; 相关文章地址&#xff1a; https://www.cnblogs.com/Dhouse/p/7776780.html https://www.javatpoint.com/java-string-format https://www.geeksforgeeks.org/java-string-format-method-with-examples/ 前言 虽然System.out.println()适合调试和…

5 STM32复位和时钟控制

STM32的复位功能 系统复位&#xff1a; 系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器为它们的复位数值。&#xff08;按键复位和软件复位属于系统复位&#xff09; 电源复位&#xff1a; 电源复位将复位除了备份区域外的所有寄存器。…

【Flink】DataStream API使用之转换算子(Transformation)

转换算子&#xff08;Transformation&#xff09; 数据源读入数据之后&#xff0c;就是各种转换算子的操作&#xff0c;将一个或者多个DataSream转换为新的DataSteam&#xff0c;并且Flink可以针对一条流进行转换处理&#xff0c;也可以进行分流或者河流等多流转换操作&#xf…

sql with子语句的理解

在用sqlite时&#xff0c;用到了with子语句&#xff0c;记录下对其的理解 目的&#xff1a;在1个字段中找到真正包含的数据&#xff0c;一般用于like&#xff0c;但该字段可能是复杂的字符串数组。 例子数据&#xff0c;如&#xff1a; 【E2806894200050010B93C473,123456】…

软件分享:Cpu-Z电脑CPU检测工具介绍(附下载)

目录 一、软件介绍 二、功能介绍 三、使用方法 1、通过 CPU-Z 查看 CPU 信息 2、缓存信息 3、主板信息 4、内存信息 5、内存规格信息&#xff08;SPD&#xff09; CPU是计算机中负责读取指令&#xff0c;对指令译码&#xff0c;并执行指令的核心部件。CPU自产生以来&am…

chatgpt赋能python:用Python计算BIM:优点、应用和结论

用Python计算BIM&#xff1a;优点、应用和结论 Building Information Modeling&#xff08;BIM&#xff09;是一种数字化的建筑设计和施工方法&#xff0c;它包括从建筑物的设计、施工到维护和拆除的整个生命周期。BIM在大规模工程建设中越来越受到欢迎&#xff0c;Python编程…

单片机强排热水器方案

单片机强排热水器方案 MCU型号 MM32SPIN05TW、MM32SPIN080C 产品概述 MM32SPIN05TW本产品使用高性能的ArmCortex-M0为内核的32位MCU&#xff0c;最高工作频率可达72MHz&#xff0c;内置高速存储器&#xff0c;丰富的I/O端口和外设连接到外部总线。本产品包含1个12位ADC、1个比…

【群智能算法改进】基于二次插值策略的改进白鲸优化算法 改进后的EBWO[3]算法【Matlab代码#44】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始BWO算法2. 基于二次插值策略的EBWO算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始BWO算法 白鲸优化算法 (BWO&#xff0c;beluga whale optimization)…

宝塔SSL续签以及申请报CURL(7)与CURL(28)错误解决方案

说一下具体背景以及遇到的问题&#xff1a; 主要是网站的SSL过期以后&#xff0c;点击宝塔里的续签功能&#xff0c;弹出一个黑框&#xff0c;等超时后报以下错误 其中也尝试过很多方法&#xff0c;都没什么用&#xff0c;当然&#xff0c;如果报错信息不是这类情况&#xff…