Leetcode 中等:54. 螺旋矩阵

【LeetCode】第54题——螺旋矩阵(难度:中等) 【LeetCode】第54题——螺旋矩阵(难度:中等)题目描述解题思路代码详解注意点 题目描述 给你一个 m 行 n 列的矩阵 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] 阅读详情

题目:螺旋矩阵

  • 题号:54
  • 难度:中等
  • https://leetcode-cn.com/problems/spiral-matrix/

给你一个 m 行 n 列的矩阵 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]

示例 3:

输入:
[
  [1]
]
输出: [1]

示例 4:

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

提示:

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

实现

C# 语言

public class Solution
{
    public IList<int> SpiralOrder(int[][] matrix)
    {
        IList<int> result = new List<int>();
        if (matrix == null || matrix.Length == 0)
            return result;

        int start = 0;
        int end1 = matrix[start].Length - 1 - start;
        int end2 = matrix.Length - 1 - start;

        // 只有横着的情况
        if (start == end2)
        {
            LeftToRight(start, end1, start, matrix, result);
            return result;
        }
        //只有竖着的情况
        if (start == end1)
        {
            TopToBottom(start, end2, start, matrix, result);
            return result;
        }

        while (start < end1 && start < end2)
        {
            LeftToRight(start, end1, start, matrix, result);
            TopToBottom(start + 1, end2, end1, matrix, result);
            RightToLeft(end1 - 1, start, end2, matrix, result);
            BottomToTop(end2 - 1, start + 1, start, matrix, result);
            start++;
            end1 = matrix[start].Length - 1 - start;
            end2 = matrix.Length - 1 - start;
        }
        // 只剩下横着的情况
        if (start == end2)
        {
            LeftToRight(start, end1, start, matrix, result);
        }
        else if (start == end1)
        {
            //只剩下竖着的情况
            TopToBottom(start, end2, start, matrix, result);
        }
        return result;
    }

    private void LeftToRight(int start, int end, int rowIndex, int[][] matrix, IList<int> lst)
    {
        for (int i = start; i <= end; i++)
        {
            lst.Add(matrix[rowIndex][i]);
        }
    }

    private void TopToBottom(int start, int end, int colIndex, int[][] matrix, IList<int> lst)
    {
        for (int i = start; i <= end; i++)
        {
            lst.Add(matrix[i][colIndex]);
        }
    }

    private void RightToLeft(int start, int end, int rowIndex, int[][] matrix, IList<int> lst)
    {
        for (int i = start; i >= end; i--)
        {
            lst.Add(matrix[rowIndex][i]);
        }
    }

    private void BottomToTop(int start, int end, int colIndex, int[][] matrix, IList<int> lst)
    {
        for (int i = start; i >= end; i--)
        {
            lst.Add(matrix[i][colIndex]);
        }
    }
}

Python 语言

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        result = []
        if matrix is None or len(matrix) == 0:
            return result

        start = 0
        end1 = len(matrix[start]) - 1 - start
        end2 = len(matrix) - 1 - start

        if start == end2:
            self.LeftToRight(start, end1, start, matrix, result)
            return result

        if start == end1:
            self.TopToBottom(start, end2, start, matrix, result)
            return result

        while start < end1 and start < end2:
            self.LeftToRight(start, end1, start, matrix, result)
            self.TopToBottom(start + 1, end2, end1, matrix, result)
            self.RightToLeft(end1 - 1, start, end2, matrix, result)
            self.BottomToTop(end2 - 1, start + 1, start, matrix, result)
            start += 1
            end1 = len(matrix[start]) - 1 - start
            end2 = len(matrix) - 1 - start

        if start == end2:
            self.LeftToRight(start, end1, start, matrix, result)
        elif start == end1:
            self.TopToBottom(start, end2, start, matrix, result)

        return result

    def LeftToRight(self, start, end, rowIndex, matrix, lst):
        for i in range(start, end + 1):
            lst.append(matrix[rowIndex][i])

    def TopToBottom(self, start, end, colIndex, matrix, lst):
        for i in range(start, end + 1):
            lst.append(matrix[i][colIndex])

    def RightToLeft(self, start, end, rowIndex, matrix, lst):
        for i in range(start, end - 1, -1):
            lst.append(matrix[rowIndex][i])

    def BottomToTop(self, start, end, colIndex, matrix, lst):
        for i in range(start, end - 1, -1):
            lst.append(matrix[i][colIndex])
【中等】力扣算法题解析LeetCode54:螺旋矩阵 本文介绍了一种模拟顺时针螺旋遍历矩阵的算法。通过维护四个动态边界(上、下、左、右),依次处理矩阵的外层元素后向内收缩边界,直至覆盖所有元素。算法时间复杂度为O(m×n),空间复杂度O(1)(不含结果存储)。Java实现中预分配结果列表容量,并通过循环条件确保无重复访问。该解法高效直观,适用于任意m×n矩阵的螺旋遍历需求。 阅读详情

相关推荐

AUTOSAR FEE 换页机制深度解析:从原理到实现逻辑

​​没有磨损均衡的EEPROM模拟,如同在沙地上建造城堡​​ ——AUTOSAR存储系统设计箴言

汽车电子软件领域知识分享 1338

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

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 753

思科网络进阶——多生成树协议(MSTP)配置的一课一得

三、实验拓扑1)设计一个网络架构,要有核心层和接入层,都使用思科交换机。2)企业有4个部门,要求这四个部门都可以上网,但分属不同的VLAN中,这样今后可以做其它安全策略以确保网络安全,这些策略如今后学到的访问控制列表ACL。3)网络架构的设计要具有冗余,防止一条线路或一台设备终端导致的业务中断。4)由于硬件冗余而产生的环路要处理好,也就是要在逻辑上(或者说通过配置)防止物理环路的产生。5)不能因为防止物理环路而导致某端口没有流量,这样浪费端口资源及设备间互联的带宽资源。

zhu52010的博客 3398

LeetCode-54、螺旋矩阵-中等

LeetCode-54、螺旋矩阵-中等 给定一个包含m x n个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8...

clover_my的博客 161

格拉姆角场(GAF)实战:用Python实现时间序列图像化处理

本文深入解析了格拉姆角场(GAF)技术,这是一种将一维时间序列转化为二维图像特征的方法,以便利用卷积神经网络(CNN)等图像模型进行深度分析。文章通过Python实战代码,详细演示了GASF和GADF两种核心转换的实现过程,并探讨了其在时序数据分类任务中的应用,为故障预警、金融模式识别等场景提供了强大的图像驱动分析视角。

weixin_29079671的博客 273

高分系列卫星轨道、传感器参数等信息

遥感卫星数据简介-高分系列

中遥科 3309

力扣第54题 中等难度 螺旋矩阵

先看一眼题: 思路:其实和48题一个思路,每次把一圈的数字加到结果里,控制好递归结束的位置就好了 代码: public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<>(); __spiralOrder(0, matrix, list); return list; } public void _

加文斯利的博客 234

【技能】伪真openclaw主动式智能体—告别‘巨婴’AI工具人:体验主动智能体的魅力

摘要: 传统AI常因被动执行、缺乏闭环而令人抓狂。Proactivity主动执行能力将AI从"指令跟随者"升级为"主动合伙人",具备预判需求、自动推进、断聊恢复、问题自解等能力。其核心原理在于建立AI专属工作体系(持久化内存、动态任务层、临时缓存层、归档复盘层),通过7步闭环(感知触发→状态恢复→边界校验→方案探索→动作决策→执行落地→状态留存)确保安全高效。

海兰 207

LeetCode第54题:螺旋矩阵(中等)

LeetCode第54题:螺旋矩阵(中等) 题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 解法一:就是按照规则一个一个读数据。 class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer...

new_whiter的博客 236

UltraScale系列底层结构(3)——URAM概述

在UltraScale+™ 器件中,除了我们在常规熟悉的BRAM资源以外,还额外提供了URAM(UltraRAM)资源。 UltraRAM 是一种单时钟同步操作的高密度存储器,每个 UltraRAM 块可存储 288 Kb 数据,配置为 4K x 72 位的存储单元,其容量是 Block RAM 的八倍。虽然 UltraRAM 内部使用单端口存储单元,但通过在一个时钟周期内顺序执行端口 A 和端口 B 的操作,实现了双端口功能。

apple_53311083的博客 2831

APP签名验证全栈破解:Frida Hook绕过+算法逆向+Python一键调用(附可运行脚本)

做过APP逆向和爬虫的同学,肯定都被签名验证折磨过:改了一行代码重新打包,APP直接闪退;抓包看到接口有个sign参数,翻遍JS找不到加密逻辑;好不容易找到加密函数,一调用就崩溃。客户端APK签名校验服务端接口签名验证。前者防止你篡改APP,后者防止你伪造请求。很多人卡在第一步,改完APK就闪退,根本没机会碰接口。本文基于真实项目实战,分享一套通用的签名验证破解方案。从客户端APK签名校验的Frida Hook绕过,到服务端sign算法的逆向还原,最后用Python实现一键调用。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 963

LeetCode_螺旋遍历_中等_54.螺旋矩阵

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

代码星辰的博客 915

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由(如何解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题)

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由

XiaoqiangClub的博客 1万+

leetcode 中等难度 第54题 螺旋矩阵

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 思路是对的,就是在边界的处理上,有一点小问题。 class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<>(); if(matrix==null || matrix.length=

spades_seven的博客 312

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

中等-LeetCode 54. 螺旋矩阵

题目 来源:螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 解题思路及代码 1. 思路 自己思考的时候: m行,n列,第i行,第j列, i = 0,j++ >> j = n-1,i++; >> i=m-1; j-- ; >> j=0;i-- >> i=1,j++ >> j=n-2,i++ >> i=m-2,j-- >> j=1,i

weixin_43912756的博客 191

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode[中等] 54.螺旋矩阵

给你一个m行n列的矩阵matrix,请按照,返回矩阵中的所有元素。思路:定义方向数组,按照顺时针顺序:右(0,1),下(1,0),左(0,-1),上(0,-1)order。

Theolulu的博客 543

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

leetcode【中等】54、螺旋矩阵

思路: 定义表示四条边的变量l,r,t,b表示左右上下 按照顺序遍历上右下左四条边,每遍历一条边该范围缩小1,比如上边遍历完,则t减一。定义一个计数变量num,当num等于所有元素数量之和则跳出循环 注意有可能在循环结束前已经超过了范围,所以在遍历四条边时候,也要加上条件num <= total class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: l=0 .

qq_40707462的博客 184

leetcode54.螺旋矩阵(中等)

思路: 以画一个“口”字为一圈(右->下->左->上),重复画“口”即可,通过观察,起点的位置分别为:(0,0) (1,1)(2,2)… 难点1:循环终止条件的选择: 当2×3的矩阵时,从(0,0)循环一圈即可 ----------------------> 下标< min(2,3)/2 当3×2的矩阵时,从(0,0)循环一圈即可 ----------------------> 下标<min(2,3)/2 当3×4的矩阵时,从...

zhangjiaji111的博客 130

LeetCode热题100--54.螺旋矩阵--中等

给你一个 m 行 n 列的矩阵 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]

2301_80071187的博客 1208

力扣54 59 2326 885 螺旋矩阵[中等](优雅解法)

一文搞定螺旋矩阵类问题

BadSheepC 585

0020【数组】中等LeetCode54.螺旋矩阵

LeetCode54.螺旋矩阵

妙语空空的博客 143

00模拟/数组中等 LeetCode54. 螺旋矩阵 牛客NC.38螺旋矩阵

螺旋矩阵 题目描述 给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。 思路: 参考YouLookDeliciousC的题解 如何螺旋遍历:matrix[i][j]两个下标其中一个固定另一个变动,即遍历一行(列),螺旋换方向时,原来固定的变动,原来变动的固定。 明确边界,每次遍历后都检查是否超出边界,超出则退出循环,返回结果。 import java.util.ArrayList; public class Solution { public ArrayList<I

31楼下小黑的博客 270

【LeetCode-中等题】54. 螺旋矩阵

思路就是定义四个指针边界,按顺序扫完一遍,再缩小区域再扫描。

weixin_45618869的博客 362

LeetCode 54. 螺旋矩阵 && 59. 螺旋矩阵 II(中等、数组)day24

54. 螺旋矩阵: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 输入: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 <=

qq_43751200的博客 507

LeetCode——54. 螺旋矩阵(Spiral Matrix)[中等]——分析及代码(Java)

LeetCode——54. 螺旋矩阵[Spiral Matrix][中等]——分析及代码[Java]一、题目二、分析及代码1. 逐层遍历(1)思路(2)代码(3)结果三、其他 一、题目 给你一个 m 行 n 列的矩阵 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,1

江南土豆的博客 267

【中等】【LeetCode刷题笔记(二十九)】之54.螺旋矩阵

本文章由公号【开发小鸽】发布!欢迎关注!!! 老规矩–妹妹镇楼: 一. 题目 (一) 题干         给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 (二) 示例 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6

开发小鸽 193
上一篇: Leetcode 中等:50. Pow(x,n)
下一篇: Leetcode 中等:55. 跳跃游戏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

青少年编程小助手_Python

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

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

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

打赏作者

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

抵扣说明:

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

余额充值