[leetcode] 54. 螺旋矩阵

文章目录

  • 题目描述
  • 解题方法
    • 模拟
      • 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://xiahunao.cn/news/2969031.html

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

相关文章

【错题集-编程题】腐烂的苹果(多源 BFS + 最短路)

题目链接&#xff1a;腐烂的苹果_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 多源 BFS 问题&#xff0c;加一点最短路的思想&#xff0c;固定套路。 二、代码 //看了题解之后AC的代码 class Solution { private:int n, m;bool vis[1010][1010];int dx[4]{-1,0,1,0}, dy[4]{…

1.微服务介绍

完整的微服务架构图 注册中心 配置中心 服务集群 服务网关 分布式缓存 分布式搜索 数据库集群 消息队列 分布式日志服务 系统监控链路追踪 Jenkins docker k8s 技术栈 微服务治理&#xff1a; 注册发现、远程调用、负载均衡、配置管理、网关路由、系统保护、流量…

新迭科技现已加入2024快递物流展邀您现场参观

参展企业介绍 上海新迭科技有限公司是一家从事技术服务,技术开发,技术咨询等业务的公司&#xff0c;成立于2022年04月29日&#xff0c;公司坐落在上海市&#xff0c;企业的经营范围为:一般项目&#xff1a;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广&#xf…

揭秘1688选品高阶玩法,90%的人都没注意到(下篇)

店雷达继续为各位商家揭秘1688选品7大高阶玩法&#xff0c;错过前4个选品场景思路干货的商友们可以点击上篇查看哦。希望帮助各位找到符合自己选品方向&#xff0c;提供一些新的思路帮助。☛《揭秘1688选品高阶玩法&#xff0c;90%的人都没注意到&#xff08;上篇&#xff09;》…

【Leetcode】代码随想录Day16|二叉树3.0

文章目录 104 二叉树的最大深度559 n叉树的最大深度111 二叉树的最小深度222 完全二叉树的节点个数 104 二叉树的最大深度 递归法&#xff1a;无论是哪一种顺序&#xff0c;标记最大深度 class Solution(object):def depthHelper(self, root, depth):if root:depth 1left_de…

2024华中杯C题光纤传感器平面曲线重建原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024华中杯数学建模C题的完整论文啦。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 14 2.3问题三 14 三、模型假设 15 四、…

基于Java+SpringBoot+Vue前后端分离仓库管理系统

基于JavaSpringBootVue前后端分离仓库管理系统 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#…

进程控制相关

进程终止 进程终止时&#xff0c;操作系统要释放对应进程申请的相关内核数据结构和对应的代码和数据。其不本质就是释放进程申请的系统资源。 进程终止的常见方式&#xff1a; 1、代码运行完毕且结果正确。 2、代码运行完毕但结果不正确。 3、代码没运行完&#xff0c;进程…

【学习笔记】论文创新点

论文创新点 论文创新点的突破口 论文的烦恼 选择方向&#xff0c;热门方向&#xff08;但不是最新的&#xff09;。 经典的、持续时间长的&#xff0c;学习资源多。 应用型创新 适应在交叉学科 数量少 一般需要改进算法 怎么改进是一个很大的问题 因此寻找创新点十分重要 …

《操作系统导论》第26章读书笔记:并发:介绍

《操作系统导论》第26章读书笔记&#xff1a;并发&#xff1a;介绍 —— 杭州 2024-04-18 夜 文章目录 《操作系统导论》第26章读书笔记&#xff1a;并发&#xff1a;介绍0.前言1.实例&#xff1a;线程创建(略)2.为什么更糟糕&#xff1a;共享数据(略)3.核心问题&#xff1a;不…

ruoyi创建子模块

点击项目 -> new -> Module 选择maven模式 构建完成 子项目默认会加入到父项目maven控制在 父项目 pom文件中 dependencyManagement 标签内加入一下代码 新建子模块的名称<!-- 测试--><dependency><groupId>com.safety</groupId><artifact…

记录汇川:五个ST案例

起保停&#xff1a; 简单数学教学&#xff1a; 数据查找&#xff1a; 按钮检测&#xff1a; 数据堆栈&#xff1a;

C#自定义窗体更换皮肤的方法:创建特殊窗体

目录 1.窗体更换皮肤 2.实例 &#xff08;1&#xff09;图片资源管理器Resources.Designer.cs设计 &#xff08;2&#xff09;Form1.Designer.cs设计 &#xff08;3&#xff09;Form1.cs设计 &#xff08;4&#xff09; 生成效果 &#xff08;5&#xff09;一个遗憾 1.窗…

Unity类银河恶魔城学习记录12-17 p139 In game UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFie…

【Linux】创建IDEA桌面快捷方式

Linux系统安装IDEA保姆级教程_linux安装idea-CSDN博客 在Ubuntu上安装Intellij IDEA并创建桌面快捷方式 - 极客子羽 - 博客园 (cnblogs.com) 下载安装包解压到指定目录 /opt/softWare 进入bin目录&#xff0c;ll查看 桌面打开终端&#xff0c;创建文件 touch idea.desktop s…

面试题:Java中int符号数字的位运算与操作 + 原码、反码、补码之间如何进行转换

题目来源 阿里-淘天-技术1面 问题 -1和4做位运算与操作&#xff0c;结果是多少&#xff1f; 答案 正确答案 4 通过Java代码验证如下&#xff1a; 我的回答 -5&#xff0c;但是-5是错误的答案。 面试的时候&#xff0c;面试官没有告诉我对错。 为什么&#xff1f; 到底…

上网行为审计软件有哪些|好用的上网行为管控软件推荐

上述图片中提到的情况&#xff0c;可能有人会有些疑惑&#xff0c;不过无妨。 小编来告诉你是怎么回事&#xff01; 这是因为他们老板使用了上网行为审计软件&#xff01; 一、什么是上网行为审计软件 上网行为审计软件是一种专门用于监控和管理员工或学生上网行为的软件系统…

36. UE5 RPG在激活技能时使用蒙太奇动画

在上一篇文章里面&#xff0c;我们实现了一个简单的火球术&#xff0c;创建了火球术的火球&#xff0c;以及能发射它的技能。很简陋&#xff0c;在技能触发的时候&#xff0c;直接在武器的位置生成火球发射出去。在一篇文章里&#xff0c;我们要实现使用技能时&#xff0c;角色…

盒子模型之怪异盒模型

这个是标准盒模型 这个是怪异盒模型 box-sizing:content-box;默认是标准盒模型 box-sizing:border-box;是怪异盒模型&#xff0c;会挤压里面的内容&#xff0c;不管怎么设置边框始终都是当初设置的200px <!DOCTYPE html> <html lang"en"> <head>…

leetcode199 二叉树的右视图

题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 解析 这道题首先能想到的办法&#xff0c;就是使用迭代法层次遍历&…