【LeetCode】解题54:Spiral Matrix

五大经典遥感数据集对比:LoveDA、Potsdam、Toronto、Vaihingen、Massachusetts Roads选哪个? 本文深度对比了LoveDA、Potsdam、Vaihingen、Toronto和Massachusetts Roads五大经典遥感数据集。针对城市监测、道路提取、土地分类等不同任务,从分辨率、标注质量、数据规模及场景多样性等核心维度进行分析,为研究者根据项目目标、硬件条件与应用场景选择最合适的遥感数据集提供决策指南。 阅读详情

Problem 54: Spiral Matrix [Medium]

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

Example 1:

Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]

Example 2:

Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]

来源:LeetCode

解题思路

将二维数组由外圈至里圈拆分,每个圈的起点正好位于matrix[i][i],只需要写一个循环一圈的函数side_order(),然后选择不同的起点调用该函数,一共调用 min ⁡ ( m , n ) + 1 2 \frac{\min(m,n)+1}{2} 2min(m,n)+1​次。

如下图所示:
在这里插入图片描述
红色为第一次调用side_order()函数,起始位置为(0,0),蓝色为第二次调用,起始位置为(1,1)。

具体过程:

  • 循环 min ⁡ ( m , n ) + 1 2 \frac{\min(m,n)+1}{2} 2min(m,n)+1​次,每次选中的圈的四个顶点为:
    t o p _ l e f t = [ s i d e , s i d e ] , top\_left = [side, side], top_left=[side,side],
    t o p _ r i g h t = [ s i d e , n − s i d e − 1 ] , top\_right = [side, n-side-1], top_right=[side,n−side−1],
    b o t t o m _ r i g h t = [ m − s i d e − 1 , n − s i d e − 1 ] , bottom\_right = [m-side-1, n-side-1], bottom_right=[m−side−1,n−side−1],
    b o t t o m _ l e f t = [ m − s i d e − 1 , s i d e ] bottom\_left = [m-side-1, side] bottom_left=[m−side−1,side]
  • 顺时针遍历四条边依次选入最终结果的点为
    [side, side ~ n-side-1],
    [side+1 ~ m-side-1, n-side-1],
    [m-side-1, n-side-2 ~ side],
    [m-side-2 ~ side+1, side]
  • 注意:当选中的圈的行数或列数为1时,需要及时结束函数,避免重复选入。

整个算法只遍历一次数组,时间复杂度为O(m*n)

运行结果:
在这里插入图片描述

Solution (Java)

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length;
        if(m == 0) return new ArrayList<Integer>();
        int n = matrix[0].length;
        List<Integer> result = new ArrayList<Integer>();
        int num = Math.min(m,n);
        for(int i = 0; i < (num+1)/2; i++){
            side_order(matrix, m, n, i, result);
        }
        return result;
    }

    private void side_order(int[][] matrix, int m, int n, int side, List<Integer> result){
        for(int j = side; j < n - side; j++){
            result.add(matrix[side][j]);
        }
        if(side + 1 >= m - side) return;
        for(int i = side+1; i < m - side; i++){
            result.add(matrix[i][n-side-1]);
        }
        if(n - side - 2 < side) return;
        for(int j = n - side - 2; j >= side; j--){
            result.add(matrix[m-side-1][j]);
        }
        for(int i = m - side - 2; i >= side+1; i--){
            result.add(matrix[i][side]);
        }
    }
}

修改过程

  • 在函数side_order()中没有及时截断绕圈选点,导致会出现重复选入。
  • 循环次数使用了 ( m + 1 ) 2 \frac{(m+1)}{2} 2(m+1)​而没有选择 min ⁡ ( m , n ) + 1 2 \frac{\min(m,n)+1}{2} 2min(m,n)+1​,导致行数大于列数时会出现数组溢出。
LIN总线CAPL函数实战——动态控制报文发送(linDeactivateSlot与linActivateSlot) 本文深入解析了LIN总线测试中动态控制报文发送的核心CAPL函数linDeactivateSlot与linActivateSlot的实战应用。通过详细拆解函数参数、生效范围及限制,并结合故障注入、功耗测试等实际场景的代码示例,指导测试工程师在仿真LIN主节点时,灵活调度报文发送,实现高效自动化测试。 阅读详情

相关推荐

STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案

本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。

p5l2m9n4o6q的博客 696

leetcode:54. 螺旋矩阵(java)

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

pioneer的博客 557

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包

forfuture1978的专栏 1万+

54. 螺旋矩阵(spiralOrder)

54. 螺旋矩阵(spiralOrder) 1. python class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix:return [] left,top=0,0 right,bottom=len(matrix[0]),len(matrix) ans=[] while left<ri

zhaooyoong 453

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 278

Java 开发打飞机小游戏(附完整源码)

上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐。代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习。 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy {

一只独孤的程序猿 1万+

54. Spiral Matrix 螺旋矩阵

将一个二维矩阵,螺旋方式遍历。 Example 1: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] Output: [1,2,3,4,...

李白-2017的博客 223

【QNX+Android虚拟化方案】129 - USB眼图参数配置

【QNX+Android虚拟化方案】129 - USB眼图参数配置

|~~~热爱生活、努力学习的小伙汁~~~| 820

54. Spiral Matrix(螺旋数组)

原题链接:https://leetcode.com/problems/spiral-matrix/ 最初做这道题时,就是控制数组下标来实现转向,方法繁琐而且下标还容易出错。 于是我看官方解答,发现了一个更好的解法,记录学习一下。 int[] rowDirec={0,1,0,-1}; int[] colDirec={1,0,-1,0}; 巧妙之处就在这两个数组,用来控制转向,初始值di=0;...

God_Mood的博客 411

想重装OpenClaw?先执行这4步彻底卸载,避免配置冲突

在重装OpenClaw之前,彻底卸载是非常重要的一步。如果不彻底卸载,可能会导致: - 残留的配置文件与新安装的版本冲突 - 旧的依赖包干扰新的安装过程 - 服务冲突导致启动失败 - 数据混乱影响系统稳定性

一键难忘的博客 1040

2024 年 9 月青少年软编等考 C 语言三级真题解析

2024 年 9 月青少年软编等考 C 语言三级真题解析。

发布少儿编程考级的真题和优秀竞赛题解析,以及一些讲义。 1737

Java实现 LeetCode 54 螺旋矩阵

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], [9,10,11,12] ] 输出: [1,...

南 墙 1万+

C/C++基础讲解(四十三)之图形篇之绘制直线、圆、圆弧、 椭圆

程序主要是基于Visual studio 2019进行编译完成了,有兴趣的小伙伴可以自己安装下Visual studio 2019,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:绘制直线 实例2:绘制圆 实例2:绘制圆弧 实例2:绘制椭圆

hnjzfwy的博客 1234

Leetcode54. Spiral Matrix解题方案

Leetcode54. Spiral Matrix 题目描述 Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5] 思路 有四个方向right, left, top, bottom. direction=“right”, 当到达最右边界时,代表本行输出结束,top++, direction=“bottom”,当到达最下边界时, right–, direction = “left”,当到达最左边界是

初七的博客 161

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Leetcode54:Spiral Matrix 螺旋矩阵

54:Spiral Matrix 螺旋矩阵 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 Example 1: Input: [ ...

爱写Bug 387

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode 54. Spiral Matrix

LeetCode 54. Spiral Matrix 循环输出矩阵元素,中等难度题目,查数要认真。 Solution1:我的答案 class Solution { public: vector&amp;lt;int&amp;gt; spiralOrder(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; matrix) { if (!matrix.size()

Allenlzcoder的博客 509

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LeetCode 59. Spiral Matrix II

LeetCode 59. Spiral Matrix II Solution1:我的答案 思路和第54题差不多,就是有点慢。。。。 class Solution { public: vector&lt;vector&lt;int&gt;&gt; generateMatrix(int n) { if (n == 1) return {{1}}; vect...

Allenlzcoder的博客 915

【LeetCode】#54螺旋矩阵(Spiral Matrix)

【LeetCode】#54螺旋矩阵(Spiral Matrix) 题目描述 给定一个包含 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, ...

weixin_43858604的博客 109

spiral matrix java,Leetcode 54:Spiral Matrix 螺旋矩阵

54:Spiral Matrix 螺旋矩阵Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。Example 1:Input:[[ 1, 2...

weixin_32620855的博客 289

[leetcode] 54. Spiral Matrix 解题报告

题目链接:https://leetcode.com/problems/spiral-matrix/ Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following mat

小榕流光的专栏 547

LeetCode探索之旅(113)-54_spiral matrix

今天继续刷LeetCode,第54题,求二维矩阵的螺旋顺序。 分析: 解题思路是,按照从左到右、从上到下、从右到左、从下到上,一层一层的遍历,并添加到输出列表中。 问题: 1、注意下标问题,不要越界; 2、特殊情况的考虑(只有一行或者只有一列) 附上C++代码: class Solution { public: vector<int> spiralOrder(vector&lt...

JerryZengZ的博客 158

【LeetCode-Java】54. Spiral Matrix+59. Spiral Matrix II

54. Spiral Matrix: 1.原题 链接:https://leetcode.com/problems/spiral-matrix/ Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example

acceptedF的博客 503

【LeetCode】解题59:Spiral Matrix II

LeetCode解题 59:Spiral Matrix II Problem 59: Spiral Matrix II [Medium]解题思路Solution (Java) Problem 59: Spiral Matrix II [Medium] Given a positive integer n, generate a square matrix filled with elements ...

Fayedily的博客 246

Java详解LeetCode 热题 100(19):LeetCode 54. 螺旋矩阵(Spiral Matrix)详解

理解螺旋遍历的基本模式顺时针遍历:右→下→左→上每遍历完一圈后,边界向内收缩最终可能剩下一行、一列或一个元素边界处理的重要性正确定义和更新边界是解决螺旋矩阵问题的关键特别注意边界相等的情况,如单行或单列矩阵条件检查的必要性在遍历下边界和左边界之前,需要检查是否还有行或列未被遍历这是避免重复遍历元素的重要步骤解法选择的考虑因素四边界模拟法:直观,空间效率高,适合大多数场景方向数组模拟法:灵活,易于扩展,但需要额外空间层次遍历法:思路清晰,代码结构优美,是解决此类问题的优秀方法。

yk_dflkg的博客 1392

小白水平理解排序题目leetcode 54 Spiral Matrix (螺旋矩阵I)

54 Spiral Matrix I (螺旋矩阵 I)题目属于Array类题目,主要用到矩阵,数组,和模拟。对于Arraylei题目,可以暴力解法,二分查找,双指针,滑动窗口,递归算法)。

心安成长的码字书房 1221

LeetCode_Array_54. Spiral Matrix (C++)

目录 1,题目描述 2,思路 3,代码【C++】 1,题目描述 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. Example 1: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8,...

&再见萤火虫&的博客 319
上一篇: 【LeetCode】解题53:Maximum Subarray
下一篇: 【LeetCode】解题55:Jump Game
Fayedy
博客等级 码龄11年 2粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值