【矩阵】54. 螺旋矩阵【中等】

螺旋矩阵

  • 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

在这里插入图片描述

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

解题思路

  • 1、模拟顺时针螺旋顺序遍历矩阵的过程。
  • 2、使用四个变量表示当前的上下左右边界,初始化为矩阵的边界。
  • 3、按照顺时针螺旋顺序遍历矩阵,依次沿着上、右、下、左四个方向遍历。
  • 4、每次遍历完成一个方向后,更新对应的边界,并判断是否需要继续遍历。

java实现

public class SpiralMatrix {
    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<>();
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return result;
        }

        int rows = matrix.length;
        int cols = matrix[0].length;

        int top = 0, bottom = rows - 1, left = 0, right = cols - 1;
        //保证旋转区域是合法的且不会越界。
        // 如果这两个条件不满足,说明已经遍历完了所有的行或列
        while (top <= bottom && left <= right) {
            // 遍历上边界
            for (int j = left; j <= right; j++) {
                result.add(matrix[top][j]);
            }
            top++;

            // 遍历右边界
            for (int i = top; i <= bottom; i++) {
                result.add(matrix[i][right]);
            }
            right--;

            // 检查是否还有下边界
            if (top <= bottom) {
                // 遍历下边界
                for (int j = right; j >= left; j--) {
                    result.add(matrix[bottom][j]);
                }
                bottom--;
            }

            // 检查是否还有左边界
            if (left <= right) {
                // 遍历左边界
                for (int i = bottom; i >= top; i--) {
                    result.add(matrix[i][left]);
                }
                left++;
            }
        }

        return result;
    }

    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        int[][] test = {
                { 1,  2,  3,  4},
                { 5,  6,  7,  8},
                { 9, 10, 11, 12},
                {13, 14, 15, 16}
        };
        List<Integer> result = spiralOrder(matrix);
        System.out.println("顺时针螺旋顺序遍历结果: " + result);
        List<Integer> result2 = spiralOrder(test);
        System.out.println("顺时针螺旋顺序遍历结果: " + result2);
    }
}

时间空间复杂度

时间复杂度:O(m * n),其中 m 和 n 分别是矩阵的行数和列数
空间复杂度:O(1),只需要使用常数级别的额外空间

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言语法基础(说人话版)

在Rstudio中使用ctrl回车来执行某一行的代码 在R语言中&#xff0c;通常不需要像C语言一样在每条语句的结尾添加分号来表示语句结束。R语言是一种脚本语言&#xff0c;它使用换行符来分隔语句&#xff0c;因此分号通常是可选的&#xff0c;除非你想在同一行上写多个语句。在R中…

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中&#xff0c;我们提供了一个最简单的 Selenium 上手的例子。 但是某一天&#xff0c;突然发现相同的代码居然运行报错了。这是怎么回事呢&#xff1f; 日志排查 日志中其实提示的很明显了&#xff1a;Chrome浏览器和Chrome WebDriver的…

【PTA】L1-039 古风排版(C++)

题目链接&#xff1a;L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结…

B. Array Fix

思路&#xff1a;我们倒着看&#xff0c;首先判断以下当前元素有没有被操作过&#xff0c;被操作过的话&#xff0c;那么需要改为操作后的数&#xff0c;然后跟当前数的前一个数进行比较&#xff0c;如果a[i] < a[i - 1]的话&#xff0c;那么需要将a[i - 1]拆分&#xff0c;…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列&#xff09;简称MQ&#xff0c;是一种应用程序对应用程序的消息通信机制。在MQ中&#xff0c;消息以队列形式存储&#xff0c;以便于异步传输&#xff0c;在MQ中&#xff0c;发布者&#xff08;生产者&#xff09;将消息放入队列&#xff…

基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 ​编辑2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA结果导入到matlab显示结果如下&#xff1a; matlab的对比测试结果如下&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a…

C++提高笔记(四)---STL容器(stack、queue、list)

1、stack容器&#xff08;栈&#xff09; 1.1 栈stack基本概念 概念&#xff1a;stack是一种先进后出&#xff08;First In Last Out&#xff0c;FILO&#xff09;的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界调用&#xff0c;因此栈不允许有遍历行…

Java八股文(Element Plus)

Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus&#xff1f; Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库&#xff0c;用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…

【C#】int+null=null

C#语法&#xff0c;这玩意不报错 intnullnull&#xff0c;有点不合逻辑 (Int32)(bizRepair0rder.CreateTime. Value - regues.Mlodifylime.Value).TotalMinutes (Int32)(bizRepair0rder.CreateTime. Value - reques.llodifylime.Value).TotalMinutes nullstring是引用类型&…

Kotlin:runBlocking导致App应用出现ANR问题实例

runBlocking简介 runBlocking 是常规函数&#xff1b; runBlocking 方法会阻塞当前线程来等待&#xff1b; runBlocking 的主线程会一直 阻塞 直到 runBlocking 内部的协程执行完毕。 runBlocking导致App应用出现ANR问题实例的效果 点击页面上的 刷新按钮 调用 refreshByrunBlo…

IDEA中的打包Build Artifacts详解

现在大家是不是很少遇见自己打包部署项目了&#xff0c;因为现在都是自动化部署&#xff0c;所以基本大的公司都没有了这一步。当项目开发完毕&#xff0c;需要对外发布时&#xff0c;我们就会用到IDEABuild Artifacts功能&#xff0c;那么如果在idea中打包呢。 在没有创建Arti…

金蝶云星空,怎么做BI数据可视化分析?

金蝶云星空是一个流程管理方面的软件&#xff0c;如果想要做BI数据可视化分析&#xff0c;还就需要一套BI方案&#xff0c;即一套奥威BI软件金蝶云星空BI方案。 奥威BI软件&#xff0c;负责提供平台和技术&#xff1b;金蝶云星空BI方案&#xff0c;则提供标准化的数据分析模型…

自动化脚本-图片验证码识别登陆

安装依赖包 pip install requests requests 模块是 Python 中一个常用的 HTTP 库&#xff0c;用于发送 HTTP 请求和处理 HTTP 响应。它提供了简洁而友好的 API&#xff0c;使得在 Python 中进行 HTTP 请求变得十分方便&#xff08;本文用于进行验证码下载&#xff09; pip ins…

计算机考研|双非一战135上岸,408经验分享+复盘

计算机专业的同学真的别想的太天真&#xff01; 相比于其他专业&#xff0c;计算机专业的同学其实还是很有优势的 但是现在随着计算机专业的同学越来越多&#xff0c;找工作的困难程度以及学历自然而然被卷起来了 以前的算法岗基本要求在本科以上&#xff0c;现在基本都是非92研…

FPGA静态时序分析与约束(四)、时序约束

系列文章目录 FPGA静态时序分析与约束&#xff08;一&#xff09;、理解亚稳态 FPGA静态时序分析与约束&#xff08;二&#xff09;、时序分析 FPGA静态时序分析与约束&#xff08;三&#xff09;、读懂vivado时序报告 文章目录 系列文章目录前言一、什么是时序约束&#xff1…

LinuxU盘挂载原理,为什么要用到U盘挂载及实现U盘挂载

目录 一、U盘挂载原理 二、为什么要用到U盘挂载 三、实现U盘挂载 一、准备工作 1、安装gcc 2、下载ntfs-3g 3、解压 4、编译准备 5、编译并安装 二、挂载演示 一、U盘挂载原理 Linux的U盘挂载原理涉及以下几个方面&#xff1a; 设备识别&#xff1a;当您将U盘插入Lin…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能&#xff0c;一听这个功能&#xff0c;心想那还不简单&#xff0c;将父视图控件转换成图片保存就行了。按照这个思路实现&#xff0c;很快就打脸啦&#xff0c;首页的这些动画一个都没有截出来&#xff0c;就像消失啦似的。然后蠢蠢的将动画暂…

HTML—标签的分类,span和div标签,不同的标签之间类型转换

标签的分类&#xff1a; ①块级标签&#xff1a;无论内容多少&#xff0c;会充满整个行。大小可自定义 例&#xff1a;p&#xff0c;h1&#xff0c;ul&#xff0c;ol&#xff0c;hr 等 ②行级标签&#xff1a;自身的大小就是标签的大小&#xff0c;不会占一整行。大小不可调 例…

人工智能程序使用的编程语言

用C语言可以写人工智能程序吗&#xff1f; 可以用C语言编写具有人工智能功能的程序&#xff0c;但是较为复杂。C语言是一种通用的编程语言&#xff0c;它在执行速度和资源控制方面表现出色&#xff0c;这使得它适合于需要高性能处理的人工智能应用&#xff0c;如游戏AI&#xf…

三种方式使用纯 CSS 实现星级评分

本文介绍三种使用纯 CSS 实现星级评分的方式。每种都值得细品一番~ 五角星取自 Element Plus 的 svg 资源 <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 1024 1024" style""><pathfill"currentColor"d"M283.84 …