力扣经典150题第三十六题:旋转图像

embedded/2024/10/22 15:26:05/

目录

  • 力扣经典150题第三十六题:旋转图像
    • 引言
    • 题目详解
    • 解题思路
    • 代码实现
    • 示例演示
    • 复杂度分析
    • 总结
    • 扩展阅读

力扣经典150题第三十六题:旋转图像

引言

本篇博客介绍了力扣经典150题中的第三十六题:旋转图像。题目要求将给定的 n × n 二维矩阵顺时针旋转90度,并要求在原地进行修改。

题目详解

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

解题思路

要将矩阵顺时针旋转90度,可以分为两个步骤:

  1. 先进行矩阵的转置操作,即将矩阵的行列互换。
  2. 然后对转置后的矩阵进行每行元素的反转。

通过这两个步骤可以实现顺时针旋转90度的效果。

代码实现

public class RotateImage {public void rotate(int[][] matrix) {int n = matrix.length;// Step 1: Transpose the matrixfor (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;}}// Step 2: Reverse each rowfor (int i = 0; i < n; i++) {for (int j = 0; j < n / 2; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[i][n - 1 - j];matrix[i][n - 1 - j] = temp;}}}public static void main(String[] args) {RotateImage solution = new RotateImage();// 示例测试int[][] matrix1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};System.out.println("输入矩阵1:");printMatrix(matrix1);solution.rotate(matrix1);System.out.println("顺时针旋转90度后的矩阵1:");printMatrix(matrix1);int[][] matrix2 = {{5, 1, 9, 11}, {2, 4, 8, 10}, {13, 3, 6, 7}, {15, 14, 12, 16}};System.out.println("输入矩阵2:");printMatrix(matrix2);solution.rotate(matrix2);System.out.println("顺时针旋转90度后的矩阵2:");printMatrix(matrix2);}private static void printMatrix(int[][] matrix) {for (int[] row : matrix) {System.out.println(Arrays.toString(row));}System.out.println();}
}

示例演示

展示了两个不同规模的矩阵输入,并输出了顺时针旋转90度后的结果。
在这里插入图片描述

复杂度分析

该解法的时间复杂度为 O(n^2),其中 n 是矩阵的大小(行数或列数)。空间复杂度为 O(1),除了存储结果的列表外,没有使用额外的空间。

总结

本篇博客介绍了如何实现顺时针旋转90度的矩阵操作,并给出了具体的解题思路和代码实现。希望对你有所帮

助!

扩展阅读

  • 力扣官方题解 - 旋转图像

http://www.ppmy.cn/embedded/10666.html

相关文章

新的全息技术突破计算障碍

一种突破性的方法利用基于Lohmann透镜的衍射模型实时创建计算机生成全息图&#xff08;CGH&#xff09;&#xff0c;在保持3D可视化质量的同时&#xff0c;大大降低了计算负荷要求。 全息显示为制作逼真的三维图像提供了一条令人兴奋的途径&#xff0c;这种图像给人以连续深度…

4.0-Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

Python 序列&#xff08;Sequence&#xff09;是指按特定顺序依次排列的一组数据&#xff0c;它们可以占用一块连续的内存&#xff0c;也可以分散到多块内存中。Python 中的序列类型包括列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字典&#xff08…

Tensorflow AutoGraph 的作用和功能

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ TensorFlow AutoGraph 是 TensorFlow 中的一个重要特性&#xff0c;它允许开发者使用普通的 Python 语法编写高效的 TensorFlow 图&#xff08;graph&#xff09;。这意味着开发者可以利用 Python 的易…

Flutter 从源码扒一扒Stream机制

Stream的基本使用 //1、创建一个流控制对象&#xff0c;只要用来控制流的暂停、取消和订阅 StreamController _controller StreamController();//2、实现对一个流的订阅和监听事件 _controller.stream.listen((event) { print("event$event"); });//3、添加一个事件…

制造企业研发设计资源用共享云桌面集中管控有哪些优势?

在制造企业上云的过程中&#xff0c;因为它们多用3D设计软件&#xff0c;所以选择一款高效、稳定、安全的云桌面产品显得尤为重要。云飞云共享云桌面作为一种新型的云桌面产品&#xff0c;正逐渐受到越来越多制造企业的青睐。那么&#xff0c;制造企业为什么要选云飞云共享云桌…

书生·浦语大模型-第四节课笔记/作业

笔记 作业 xtuner train ./config/internlm2_chat_7b_qlora_alpaca_e3_copy.py --work-dir ./train微调前效果 微调后效果 微调过程-transformer-lora

Linux 自动分区的调整策略

不少人在安装Linux系统时&#xff0c;分区这一步选择默认&#xff0c;会出现根分区比较小&#xff0c;home分区会比较大的情况。一段时间运行后&#xff0c;由于/var目录位于根分区&#xff0c;日常运行产生的日志等文件会占满根分区空间&#xff0c;会出现程序报错或者空间报警…

学习Rust的第11天:模块系统

Rust的模块系统可以使用它来管理不断增长的项目&#xff0c;并跟踪 modules 存储在何处。 Rust的模块系统是将代码组织成逻辑片段的有效工具&#xff0c;因此可以实现代码维护和重用。模块支持分层组织、隐私管理和代码封装。Rust为开发人员提供了多功能和可扩展的方法来管理项…