数据结构与算法之矩阵: LeetCode 48. 旋转矩阵 (Ts, Py, Go版)

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3] class Solution { public void rotate(int[][] matrix) { int len = matrix.length; //上下交换 for(int i = 0; i < len / 2; i++){ ... 阅读详情

旋转图像

  • https://leetcode.cn/problems/rotate-image/

描述

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

Typescript 版算法实现


1 )方案1

/**
 Do not return anything, modify matrix in-place instead.
 */
function rotate(matrix: number[][]): void {
    // 获取维度: n
    let n = matrix.length;
    // 垂直翻转
    for (let i = 0, len = n / 2; i < len; i++) {
        for (let j = 0, tmp: number; j < n; j++) {
            // 交换:同一列,交换的是行
            [matrix[i][j], matrix[n - i - 1][j]] = [matrix[n - i - 1][j], matrix[i][j]];
        }
    }
    // 对角线翻转
    for (let i = 0; i < n; i++) {
        for (let j = 0, tmp: number; j < i; j++) {
            // 交换:交换的是行列
            [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
        }
    }
};
  • 想要旋转图像,就要找到一个中心轴来作为旋转的基础
  • 在原有矩阵上操作,类似于排序,这样,使用元素之间的交换来做
  • 这里面有一个技巧
    • 以矩阵中间的x方向轴(中位线) 上下交换
    • 再以斜-45度对角线(前提: 以左上角为原点) 进行交换,即可转换完成

Python3 版算法实现


1 ) 方案1

from typing import List

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        
        # 垂直翻转
        for i in range(n // 2):
            for j in range(n):
                # 交换:同一列,交换的是行
                matrix[i][j], matrix[n - i - 1][j] = matrix[n - i - 1][j], matrix[i][j]
        
        # 对角线翻转
        for i in range(n):
            for j in range(i):
                # 交换:交换的是行列
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

Golang 版算法实现


1 ) 方案1

func rotate(matrix [][]int) {
	n := len(matrix)

	// 垂直翻转
	for i := 0; i < n/2; i++ {
		for j := 0; j < n; j++ {
			// 交换:同一列,交换的是行
			matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]
		}
	}

	// 对角线翻转
	for i := 0; i < n; i++ {
		for j := 0; j < i; j++ {
			// 交换:交换的是行列
			matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
		}
	}
}
力扣——48.旋转图像(中等难度)——仅仅考验你的数学思维 48.旋转图像——仅仅考验你的数学思维算法目录合集地址说明题目说明题干原地址实现步骤思路分析代码实现方法代码测试部分代码耗用资源情况官方题解原地址答案一——转置加翻转思路分析代码实现复杂度答案二——旋转四个矩形思路分析代码实现复杂度 算法目录合集 地址    算法目录合集 说明   该地址指向所有由本人自己所经历的算法习题(也有可能仅仅是一个入门的案例或者是经典案例),仅仅为我做过而且比较有意思的,也许还会有一些我自己想出来的,出于兴趣写在这里,具体格式我会在下面列明,总目录也会在这里出现,方便查阅以及自己 阅读详情

相关推荐

PLL锁相环基础知识(一)

本文介绍了锁相环(PLL)的核心组件及其工作原理,重点阐述了压控振荡器(VCO)的结构与调谐机制。VCO作为PLL的关键部分,通过变容二极管实现频率调谐,但易受温度、电压等因素影响稳定性。文章详细讲解了VCO的谐振电路原理、硅基集成方案,以及通过分频器和调制器实现的频率控制技术。特别分析了整数型和分数型N分频器的差异,指出高阶德尔塔-西格玛调制器可有效降低分数杂散。文章还探讨了预分频器的应用及其对频率分辨率的影响,揭示了PLL通过反馈环路实现频率锁定的基本原理。

weixin_49761275的博客 3039

前端使用canvas将颠倒的图片进行旋转矫正

效果展示图 图1为原图 图2为180°旋转后的结果 图3为镜像翻转的结果 相关原理 主要是用了canvas里变换相关的API,处理后再使用canvas绘制图片 1.旋转图片 默认情况下,绘制图片的效果如图1 (图中预期为错别字,是区域…) 移动原点到canvas的中心点:成像效果如图2 绕原点顺时针旋转Pi个弧度,成像效果如图3 最后调整从(-img_width / 2, -img_height / 2)这个下标开始画图即可 2.图片镜像 通过scale调整方向即可。 scale(scaleX, s

Erin_jwx的博客 3434

Windows 11 + AMD 780M 运行 ComfyUI 完整指南:DirectML 实战方案

ComfyUI 是基于 PyTorch 的 Stable Diffusion 可视化工作流工具,其性能高度依赖 GPU 后端支持。在 Windows 平台,传统 CUDA 方案仅适配 NVIDIA 显卡,而 AMD 核显用户长期面临 ROCm 兼容性差、驱动链路断裂等系统级障碍。DirectML 作为微软原生机器学习 API,绕过 ROCm 生态断层,直接对接 DirectX 12 硬件抽象层,成为 RDNA 3 架构(如 Radeon 780M)在 Windows 11 上运行 AI 绘画的最优解。它提供

weixin_30099989的博客 748

javaScript 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]] 来源:力扣(LeetCode) /** * @param {number[][]} matrix * @return {void} Do not ret

Cupid 556

从MFCC到GMM:手把手教你用Python实现说话人识别(附完整代码)

本文详细介绍了如何使用Python实现说话人识别系统,从MFCC特征提取到GMM模型训练,涵盖完整的技术流程和代码示例。通过梅尔频率倒谱系数(MFCC)和高斯混合模型(GMM)的结合,构建高效的说话人识别系统,适用于身份认证和智能交互场景。文章还探讨了从传统方法到深度学习的进阶话题,如i-vector和x-vector技术。

o1p2q3r的博客 201

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req

qq_26751379的博客 2万+

【JavaScript】js实现图片翻转

我们先来看一个没有预加载的图片翻转的例子:<img src="image/help.gif" onmouseover="this.src='images/help_rollover.gif'" onmouseout="this.src='images/help.gif'" > 当鼠标指针经过或者离开<img>元素时候,事件处理程序会重新设置其src属性。 为了有用起见,像

热爱思考、活力满满、开朗爱笑的年轻人 3812

Spring AI Alibaba实战训练营-16 NL2SQL (自然语言转 SQL)应用开发指南

本文介绍了一个基于AI的智能BI应用开发项目,主要实现自然语言转SQL(NL2SQL)功能,包含对话模块、MCP模块、向量数据管理模块。项目采用Spring AI Alibaba框架,集成通义千问大模型,支持内存向量库和AnalyticDB向量数据库两种存储方案。重点展示了chat模块的三个控制器实现:AnalyticNl2SqlController用于生产环境,SimpleChatController适用于开发测试,Nl2sqlForGraphController支持基于图的复杂对话流程。系统通过将业务知

program哲学 1589

js 如何将图片进行镜像翻转处理

以上代码将图片进行水平镜像翻转处理。如果需要垂直镜像翻转,可以将。

qq_27487739的博客 1785

Android NDK/JNI面试题大全及参考答案(3万字长文)

是一套工具集合,它允许开发者为Android平台编写原生应用程序或者应用程序的部分模块。NDK 主要用于开发那些需要高性能计算的应用程序,例如游戏引擎、图像处理软件或音频/视频编码解码器等。通过使用 C 或 C++ 编写代码,开发者可以利用硬件加速功能,提高应用性能。NDK 提供了一系列工具来帮助开发者完成从源代码到可执行文件的整个过程,包括编译、链接、调试等功能。

大模型大数据攻城狮的专栏 1260

华为OD机试真题2026双机位C卷 Python&JS 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 322

leetcode48——旋转图像

旋转图像 题目描述:给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度 要求:你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 辅助矩阵 我们通过分析示例可以看出,转换后的矩阵和转换前的矩阵有如下关系 我们可以得出对于矩阵中第i行j列的元素,在旋转后出现在倒数第i列第j行的位置,我们可以得到如下关系。 matrix_new[j][n - i - 1] = matrix[i][j]; 所以我们可以使用一个

weixin_46107667的博客 910

26、使用WiFiServer和WiFiClient建立tcp 连接

在前面的篇章,我们使用过WiFiClient跟WiFiServer这两个类,也比较过WiFiClient跟ESP8266HTTPClient的区别,今天我们来通过例子代码学习WiFiClient跟WiFiServer怎样建立TCP连接并传输数据的。

繁星点点~ 1778

Leetcode(48)——旋转图像

Leetcode(448)——旋转图像 题目 题解 方法一:自外向内的原理旋转 思路 首先我们先来观察矩阵: ​​  1. 设 n 为矩阵的边长。当 n 为偶数和奇数时是不同的情况。当 n 为奇数时,最内圈的只有一个元素,不需要旋转。 ​​  2. 接着我们可以发现并总结出一个重要规律:设矩阵边长 l ,旋转90度后,旧位置 (a,b) => 新位置 (b,l-1-a) ​​  3. 接着就是如何旋转了,这里我们选择从外向内的旋转方式——外部一圈旋转完,再旋转内部的下一圈。 ​​  4. 每圈如何

KCDCY的博客 801

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode 48. 旋转图像(旋转矩阵)三种解法

## 48. 旋转图像(旋转矩阵) 难度:Medium 语言:Java 题目 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 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],

Camp Nou 1954

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

初级算法——旋转图像

其实所谓的旋转图像,说到底不就是数组中元素有规律的交换吗?其实我们可以将其想成一圈套一圈的数组,每圈中的数都是向前移动边长位来进行交换的。那么对于每一圈数组,我们就能设立四个指针变量,分别指向上下左右的起始元素,然后通过指针之间的元素交换与指针的前移来实现一圈圈的旋转。

littlest_white的博客 596

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

图像处理中的旋转、平移、缩放——仿射变换的原理和优化

仿射变换的原理在条形码识别软件中有图像预览的功能。有时预览的图像需要进行转置(旋转180度或者90度)、缩放、镜像(左右反转)等操作。OpenCV提供了相应的函数进行以上操作。例如: 转置:cv::WarpAffine() 缩放:cv::resize() 镜像:cv::remap() 如果同时要转置,缩放和镜像,就需要进行三次图像运算。其实以上三个操作都是同一类型的变化,称作放射变化。可以把

Bytekiller的专栏 1万+

YUV420图像旋转90算法的优化

在做android摄像头捕获时,发现从android摄像头出来的原始视是逆时针旋转了90度的,所以需要把它顺时针旋转90。android视频支持的是NV21格式,它是一种YUV420的格式。 我本想用开源的图像处理库(opencv)做旋转,但是opencv只能处理bmp的图像。这样的话,需要先把NV21转换成BMP32。然后再做旋转。所以要操作两次,效率肯定低。最后也没找到好的方法(如果你知道一

康林工作室 1万+

C#LeetCode刷题之#48-旋转图像(Rotate Image)

问题 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]...

比特飞 1万+

【LeetCode刷题】48. 旋转图像

48. 旋转图像。给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。...

weixin_48323589的博客 381

LeetCode 48:旋转矩阵

旋转矩阵1. 题目2. 示例3. 解题思路3.1 方法一:使用辅助数组3.2 方法二:原地旋转3.2.1 如何原地旋转3.2.2 哪些位置需要原地旋转3.3 方法三:用翻转代替旋转4. 提交代码4.1 方法一:使用辅助数组(占用了额外空间)4.2 方法二:原地旋转4.3 方法三:用翻转代替旋转5. 复杂度分析5.1 方法一:使用辅助数组5.2 方法二:原地旋转5.3 方法三:用翻转代替旋转6. 总结 1. 题目 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像

Amoni的博客 1934

【每日力扣11】旋转图像

一、题目 给定一个 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]]...

micah_yaokunkun的博客 1890

【LeetCode-中等】48. 旋转图像(图文详解)

java:借用辅助数组、两次翻转法

丨康有为丨的博客 800

Leetcode——第48题矩阵旋转

最主要的就是找到规律,目的就是把i行j列,变成j行n-1-i列 class Solution { public: void rotate(vector<vector<int>>& matrix) { //首先上下翻转,然后对角线翻转 目的都是从[i][j]变成[j][n-1-i] for(int i=0;i<matrix.size()/2;i++){ for(int j=0;j<matrix.si

weixin_44730078的博客 269

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]] 输出:...

allway2的博客 525

数组旋转问题,leetcode:48

数组元素顺时针旋转 leetcode:48. 旋转图像 难度中等 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在**原地**旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [

Go的全部 371
上一篇: 数据结构与算法之矩阵: LeetCode 54. 螺旋矩阵 (Ts, Py, Go版)
下一篇: WebGL笔记:矩阵的变换之平移的实现
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值