首页 > 其他分享 >54. 螺旋矩阵

54. 螺旋矩阵

时间:2024-12-17 20:31:09浏览次数:7  
标签:遍历 matrix 螺旋 int 54 矩阵 up down left

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

示例 1:
image

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

示例 2:
image

输入: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]

思路

  1. 边界控制:我们使用四个变量来控制当前遍历的边界:
    • up: 当前遍历的最上面一行。
    • down: 当前遍历的最下面一行。
    • left: 当前遍历的最左边一列。
    • right: 当前遍历的最右边一列。
  2. 螺旋遍历:我们按顺时针方向,从左到右、从上到下、从右到左、从下到上 依次遍历当前边界范围内的矩阵元素,并更新边界值。直到所有元素都被遍历。
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        int m = matrix.length;
        int n = matrix[0].length;
        int up = 0, down = m - 1, left = 0, right = n - 1;
        while(true){
            //从左到右遍历上面第up行
            for(int i = left; i <= right; i++){
                res.add(matrix[up][i]);
            }
            if(++up > down){
                break;
            }
            //从上到下遍历右边第right列
            for(int i = up; i <= down; i++){
                res.add(matrix[i][right]);
            }
            if(--right < left){
                break;
            }
            //从右到左遍历下面第down行
            for(int i = right; i >= left; i--){
                res.add(matrix[down][i]);
            }
            if(--down < up){
                break;
            }
            //从下到上遍历左边第left列
            for(int i = down; i >= up; i--){
                res.add(matrix[i][left]);
            }
            if(++left > right){
                break;
            }
        }
        return res;
    }
}

标签:遍历,matrix,螺旋,int,54,矩阵,up,down,left
From: https://www.cnblogs.com/drunkerl/p/18613369

相关文章

  • Codeforces Round 954 (Div. 3 A ~ E)
    1.A.XAxisx的范围是[1,10],可以直接枚举。voidsolve(){ cin>>x1>>x2>>x3; intres=inf; for(inti=1;i<=10;i++){ res=min(res,abs(i-x1)+abs(i-x2)+abs(i-x3)); } cout<<res<<"\n";}2.B.MatrixStabi......
  • 73. 矩阵置零
    矩阵置零给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。实例一:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]实例二:输入:matrix=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,......
  • springboot网络文学交流分享平台-毕业设计源码31754
    springboot网络文学交流分享平台 摘  要随着互联网的快速发展,网络文学交流和分享变得越来越受欢迎。为了满足作者和读者的需求,基于SpringBoot框架的网络文学交流分享平台的设计和实现。该平台旨在为作者和读者提供一个方便的交流和分享作品的平台。通过系统,作者可以上传......
  • 抖音SEO矩阵源码搭建:一键霸屏秘诀揭秘
    抖音SEO系统,也称为抖音SEO矩阵或抖音搜索优化排名系统,是一个集成了多种功能的平台。它的核心功能包括AI视频混剪、视频产出、AI视频制作、多账号多平台管理、内部分发以及站内搜索排名优化等。该系统还提供了会员爆客和企业号管理等功能。虽然每个功能都经过深度开发,但抖音作为......
  • 请说说IEEE 754规定了哪些标准?
    IEEE754标准是由国际电气和电子工程师协会(IEEE)制定的浮点数运算标准。它规定了浮点数的表示方法、运算规则以及特殊值的处理方式,为计算机系统中的浮点数运算提供了统一的规范。以下是IEEE754标准规定的主要内容:一、浮点数的表示方法符号位:用于表示浮点数的正负,0表示正数,1表......
  • 请说说IEEE 754标准指的是什么?
    IEEE754标准指的是IEEE二进制浮点数算术标准,它是计算机科学领域中广泛应用于浮点数表示的一个标准。这个标准由IEEE(电气电子工程师学会)制定,并被许多CPU和浮点运算器所采用。以下是关于IEEE754标准的一些关键点:表示方法:IEEE754标准定义了浮点数的表示格式,包括符号位、指数位......
  • 【经管数据】企业排污许可企业信息数据大全(1954-2022年)
    一、数据范围:数据量庞大,能统计的企业均有二、包含字段:企业名称      登记状态      法定代表人      注册资本      成立日期      核准日期      所属省份      所属城市      所属区县      电话......
  • Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo
    前言  本篇介绍OPC协议,相关开源库、编译并搭建Qt开发OPC的基础环境。 Demo   OPC  OPC(OLEforProcessControl)是一个工业标准,用于实现工业自动化系统中的不同设备和应用软件之间的数据交换和互操作性。以下是关于OPC的详细介绍:OPC的起源与发展 ......
  • Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144516882长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…Qt开发专栏:三方......
  • CMU_15445_P3_Part1
    CMU_15445_P3_Part1这部分主要是实现一些基本的Plan_Node的Executor,我们可以首先通过一个列子来看,就是ProjectionPlan_Node的例子.Projection类型的PLAN_NODE是作为有条件的SELECT语句或者嵌套的SELECT语句的根节点,例如:SELECTa,bFROMt1WHEREc>10;......