[leetcode] 54. 螺旋矩阵

news2025/3/10 10:53:27

文章目录

  • 题目描述
  • 解题方法
    • 模拟
      • java代码
      • 复杂度分析
  • 相似题目

题目描述

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

示例 1:
在这里插入图片描述

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

示例 2:
在这里插入图片描述

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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

解题方法

模拟

这道题和第48题有点类似,都是按照不同的方式进行矩阵遍历模拟。

我说一下具体思路,我们可以设置四个点,sr在左上角,er在右上角,sc在左下角,ec在右下角。每次遍历时,我们先从sr往右遍历到er,再由er往下遍历到ec,再由ec往左遍历到sc,再由sc往上遍历到sr。遍历完一圈后,我们再把srerscec往内缩一格,然后按照上面的方式继续遍历。直到srerscec缩到最内层时,遍历完成。
在这里插入图片描述

java代码

public List<Integer> spiralOrder(int[][] matrix) {
    List<Integer> list = new ArrayList<Integer>();
    if (matrix == null || matrix.length == 0) {
        return list;
    }
    // 起始行
    int sr = 0;
    // 起始列
    int sc = 0;
    // 结束行
    int er = matrix.length - 1;
    // 结束列
    int ec = matrix[0].length - 1;
    while (sr <= er && sc <= ec) {
        // 起始行、起始列、结束行、结束列在同一位置,只剩最后一个元素
        if (sr == er && sc == ec) {
            list.add(matrix[sr][sc]);
            break;
        }
        // 起始行等于结束行,起始列小于结束列,还剩最后一列需要遍历
        if (sr == er && sc < ec) {
            for (int i = sc; i <= ec; i++) {
                list.add(matrix[sr][i]);
            }
            break;
        }
        // 起始列等于结束列,起始行小于结束行,还剩最后一行需要遍历
        if (sr < er && sc == ec) {
            for (int i = sr; i <= er; i++) {
                list.add(matrix[i][sc]);
            }
            break;
        }
        // 其余情况,按照右、下、左、上的顺序遍历
        for (int i = sc; i < ec; i++) {
            list.add(matrix[sr][i]);
        }
        for (int i = sr; i < er; i++) {
            list.add(matrix[i][ec]);
        }
        for (int i = ec; i > sc; i--) {
            list.add(matrix[er][i]);
        }
        for (int i = er; i > sr; i--) {
            list.add(matrix[i][sc]);
        }
        // 每遍历完一圈,起始行、起始列、结束行、结束列往内缩一格
        sr++;
        sc++;
        er--;
        ec--;
    }
    return list;
}

复杂度分析

时间复杂度: O ( N ) O(N) O(N),需要遍历一次矩阵。
空间复杂度: O ( 1 ) O(1) O(1),只有几个变量存储。

相似题目

[leetcode] 48. 旋转图像

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

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

相关文章

每日两题 / 15. 三数之和 73. 矩阵置零(LeetCode热题100)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 先确定一个数t&#xff0c;对于剩下的两个数&#xff0c;要求两数之和为t的负数 三数之和就退化成了两数之和&#xff0c;两数之和可以用双指针 先排序&#xff0c;左右两个指针&#xff0c;指向的数之和大于目标值&…

PCB裸板如何测试?当然是这些....

在印刷电路板制造中&#xff0c;可能会遇见裸板测试&#xff08;主要用于监测PCB在生产过程中可能出现的缺陷&#xff0c;如开路、短路、错位等&#xff0c;以此确保后续装配和使用的顺利进行&#xff09;。本文将介绍几种常用的PCB裸板测试方案&#xff0c;希望对小伙伴们有所…

AD高速板设计(笔记)

Alt左键高亮某个器件或属性&#xff0c;点击任意位置取消高亮。 TP设置旋转角度为45度&#xff0c;即可选中器件按空格旋转时候每次旋转45度。 先画出想要割槽的区域&#xff0c;选中之后TVB即可开槽。 左右翻转电路板&#xff1a;VB DR打开规则设置 UFO对器件进行扇出&#…

LangChain入门:20.探索使用 Self-Ask with Search 代理

引言 在信息爆炸的时代&#xff0c;准确快速地找到事实性问题的答案变得尤为重要。LangChain的Self-Ask with Search代理&#xff08;SELF_ASK_WITH_SEARCH&#xff09;正是为了解决这一挑战而生。本文将深入探讨这一代理的工作原理&#xff0c;并通过实例演示其如何巧妙地处理…

【六】fastapi+vue前后端分离项目

前端代码 https://gitee.com/feiminjie/helloworldfront 后端代码 https://gitee.com/feiminjie/helloworld 整体效果 首页 用例管理页 用例详情页

TM1621E 驱动程序

TM1621E 驱动程序 TM1621E 芯片引脚TM1621E 发送数据TM1621E 发送指令TM1621E 写入时序屏幕真值表完整驱动显示函数 TM1621E 芯片引脚 CS——片选引脚&#xff0c;低电平有效。 WR——数据输入&#xff0c;在WR信号的上升沿&#xff0c;DATA 线上的数据写到TM1621E。 DATA——…

健身管理小程序|基于微信开发健身管理小程序的系统设计与实现(源码+数据库+文档)

健身管理小程序目录 基于微信开发健身管理小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 小程序端&#xff1a; 后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码…

Java-通过Maven导入本地jar包的常用方式

1.首先创建一个用于创建jar包的项目&#xff0c;进行测试 2.测试成功后进行项目打包 3.创建一个要导入本地jar包的项目&#xff0c;在项目下创建lib目录&#xff0c;并将刚才打包好的jar包复制进去 4.在pom.xml文件中引入 5.运行测试

fatal: Out of memory, malloc failed

git 切分支&#xff0c;或者clone仓库的时候碰到这个错误&#xff0c;看网上很多配置config文件&#xff0c;都尝试了没效果。 自测了一个可行的方式&#xff1a; 由于本人用的sourcetree 所以解决方式如下&#xff1a; git升级为最新版&#xff0c;选择系统GIt版本&#xf…

Qt编译静态链接库和动态链接库(WindowsLinux)

最近需要在Linux中编译相关程序动态库&#xff0c;对相关经验总结。 使用到的工具为Qt5.13.2 QT编译 1. WINDOWS1.1 静态库制作1.2 静态库的使用1.3 动态库制作1.4 动态库使用 2. LINUX2.1 静态链接库2.2动态库 附录gcc 编译程序查找顺序&#xff1a;Linux 程序运行时查找顺序&…

【静态分析】软件分析课程实验A1-活跃变量分析和迭代求解器

1 作业导览 为 Java 实现一个活跃变量分析&#xff08;Live Variable Analysis&#xff09;。实现一个通用的迭代求解器&#xff08;Iterative Solver&#xff09;&#xff0c;用于求解数据流分析问题&#xff0c;也就是本次作业中的活跃变量分析。 Live Variable Analysis 详…

Midjourney常见玩法及prompt关键词技巧

今天系统给大家讲讲Midjourney的常见玩法和prompt关键词的一些注意事项&#xff0c;带大家入门&#xff5e;&#xff08;多图预警&#xff0c;建议收藏&#xff5e;&#xff09; 一、入门及常见玩法 1、注册并添加服务器&#xff08;会的童鞋可跳过&#xff5e;&#xff09; …

Jmeter分布式压测操作流程

分布式压测原理 分布式压测操作 保证本机和执行机的JDK和Jmeter版本一致配置Jmeter环境变量配置Jmeter配置文件 上传每个执行机服务jmeter chmod -R 755 apache-jmeter-5.1.1/ 执行机配置写自己的ip 控制机配置所有执行机ip,把server.rmi.ssl.disable改成true 将本机也作为压…

骨传导耳机哪个品牌最好?六大压箱底干货,一看便知!

在当今的蓝牙耳机市场&#xff0c;骨传导耳机以其独特的佩戴方式逐渐晋升为耳机界的新宠。然而&#xff0c;随着骨传导耳机逐渐成为热门款式&#xff0c;市场上的骨传导耳机品牌琳琅满目&#xff0c;消费者在选购时往往感到无从下手。其中&#xff0c;还经常有人入手耳机后出现…

【知识】Latex中的em/pt/mm等长度单位及使用场景

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 目录 一、Latex中的em pt mm等度量单位说是什么意思&#xff1f;还有哪些&#xff1f; 二、在使用的时候应该如何选择&#xff1f;他们分别适用于那些场景&#xff1f; 三、有哪些使用示例&#xff1f; 1. 设…

文献学习-37-动态场景中任意形状针的单目 3D 位姿估计:一种高效的视觉学习和几何建模方法

On the Monocular 3D Pose Estimation for Arbitrary Shaped Needle in Dynamic Scenes: An Efficient Visual Learning and Geometry Modeling Approach Authors: Bin Li,† , Student Member, IEEE, Bo Lu,† , Member, IEEE, Hongbin Lin, Yaxiang Wang, Fangxun Zhong, Me…

刷代码随想录有感(33):滑动窗口滑行途中框内最大值

又是需要死记硬背理解的题目。 题干如下: 代码&#xff1a; class Solution { private:class MyQueue{deque<int> que;public:void pop(int value){if(!que.empty() && value que.front()){que.pop_front();}}void push(int value){while(!que.empty() &&…

「51媒体」媒体邀约采访的分类?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约采访可以根据不同的标准进行分类。以下是一些常见的分类方式&#xff1a; 1. 按照邀约形式&#xff1a; - 电话邀约&#xff1a;通过电话与媒体联系&#xff0c;说明采访或报道…

地质灾害监测预警系统:科技守护,构筑智能预警屏障

随着全球气候变化和人为活动的加剧&#xff0c;地质灾害频繁发生&#xff0c;给人们的生命财产安全带来了严重威胁。为了降低地质灾害带来的损失&#xff0c;地质灾害监测预警系统应运而生。本文将为您详细介绍地质灾害监测预警系统的原理、功能以及在实际应用中的效果。 一、地…

AI-数学-高中-37频率与概率、概率基础知识综合示例

原作者视频&#xff1a;【概率】【一数辞典】6频率与概率_哔哩哔哩_bilibili 当直接求概率不好求时&#xff0c;通过大量的实验的频率来估算概率。 在频数越大的情况下&#xff0c;波动越来越小&#xff0c;频率越稳定&#xff0c;去向一个稳定的数值&#xff0c;这个值就是概…