[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. 旋转图像

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js调用html页面需要隐藏某个按钮

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

7-26 单词长度

题目链接&#xff1a;7-26 单词长度 一. 题目 1. 题目 2. 输入输出格式 3. 输入输出样例 4. 限制 二、代码 1. 代码实现 #include <stdio.h> #include <stdbool.h>void printLen(int len, bool printOnce) {if (len) {if (printOnce) {printf(" %d",…

微信小程序picker设置了系统年度,打开选择年份从1年开始显示

背景&#xff1a;开发微信小程序时&#xff0c;使用了picker组件&#xff0c;设置值为当前系统时间年份&#xff0c;可以正常回显年份。但是打开面板选择年份的时候&#xff0c;默认从一年开始显示的。如下图所示。 原因&#xff1a;因为绑定的年份字段为Number类型。 解决方案…

性能优化工具

CPU 优化的各类工具 network netperf 服务端&#xff1a; $ netserver Starting netserver with host IN(6)ADDR_ANY port 12865 and family AF_UNSPEC$ cat netperf.sh #!/bin/bash count$1 for ((i1;i<count;i)) doecho "Instance:$i-------"# 下方命令可以…

【AI学习中常见专业英文缩写词的解释】

前言&#xff1a; 为了看着不无聊&#xff0c;文中插入了一些AI生成的狗图片 AI(Artificail Intelligence)人工智能&#xff1a; 让机器模拟和展示人类智能的技术。 GAI(Generative Artificail Intelligence)生成式人工智能: 利用复杂的算法、模型和规则&#xff0c;从大规…

fastjson

一&#xff1a;fastjson作用 1.将Java对象转换为json字符串》响应给前端。 2.将json字符串转换为Java对象 》接受前端的json数据封装到对象中。 二&#xff1a;常用API fastjson API 入口类是 com.alibaba.fastjson.JSON ,常用的序列化操作都可以在JSON类上的静态方法直接完…

DDD领域设计基础

1概述 作为架构师&#xff0c;我们在业务建模的时候不能完全凭经验、感觉&#xff0c;还得有一套方法论&#xff0c;DDD领域驱动设计恰巧可以作为业务建模的方法论来使用。 2 为什么要使用DDD 2.1 为什么需要DDD 复杂系统设计&#xff1a;系统多&#xff0c;业务逻辑复杂&a…

四信遥测终端入选河南省水利先进实用技术推广目录

近期&#xff0c;河南省水利科技推广中心发布通知&#xff0c;四信自主研发的“遥测终端机RTU”&#xff0c;列入河南省水利先进实用技术推广目录&#xff0c;认定为水利先进实用技术。 四信遥测终端 F9164系列 ●一体化设计 ●工业级设计 ●接口丰富、标准易用 ●大容量储存空…

python爬虫 - 爬取微博热搜数据

文章目录 python爬虫 -爬取微博热搜数据1. 第一步&#xff1a;安装requests库和BeautifulSoup库2. 第二步&#xff1a;获取爬虫所需的header和cookie3. 第三步&#xff1a;获取网页4. 第四步&#xff1a;解析网页5. 第五步&#xff1a;分析得到的信息&#xff0c;简化地址6. 第…

代码随想录阅读笔记-回溯【全排列 II】

题目 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2]输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3]输出&#xff1a;[[1,2,3],[1,…

JVM 性能调优命令(jps,jinfo,jstat,jstack,jmap)

常用命令&#xff1a;jps、jinfo、jstat、jstack、jmap jps jps查看java进程及相关信息 jps -l 输出jar包路径&#xff0c;类全名 jps -m 输出main参数 jps -v 输出JVM参数jps命令示例 显示本机的Java虚拟机进程&#xff1a; # jps 15729 jar 92153 Jps 90267 Jstat显示主类…

c 多文件编程

1.结构目录 声明类:用于声明方法,方便方法管理和调用&#xff1b; 实现类:用于实现声明的方法; 应用层:调用方法使用 写过java代码的兄弟们可以这么理解&#xff1a; 声明类 为service层 实现类 为serviceimpl层 应用层 为conlloter层 2.Dome 把函数声明放在头文件xxx.h中&…

外包干了7个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Spark01

Spark01 一. Spark概述二. Spark环境部署 - Local三. Spark环境部署 - Standalone1. Standalone集群概述2. Standalone环境部署3. 测试环境 四. Spark环境部署 - Standalone-HA1. 安装部署Zookeeper1. 下载2. zookeeper安装3. 配置StandAlone-HA集群 五. Spark On YARN -- 重点…

CSS 实现视差滚动效果

一、是什么 视差滚动&#xff08;Parallax Scrolling&#xff09;是指多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来非常出色的视觉体验 我们可以把网页解刨成&#xff1a;背景层、内容层、悬浮层 当滚动鼠标滑轮的时候&#xff0c;各个图层以不…

Nuclei 减少漏报的使用小技巧

在最近工作的渗透测试项目中发现Nuclei存在一个问题&#xff0c;就是相同的网站连续扫描多次会出现漏报的情况&#xff0c;此前没有注意过这个情况&#xff0c;所以写篇文章记录一下。 在此之前我的常用命令都是一把梭&#xff0c;有就有没有就继续其他测试 $ nuclei -u htt…

锂电池寿命预测 | Matlab基于GRU门控循环单元的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于GRU门控循环单元的锂电池寿命预测 Matlab基于GRU的锂电池剩余寿命预测 基于GRU的锂电池剩余寿命预测&#xff08;单变量&#xff09; 运行环境Matlab2020及以上 锂电池的剩余寿命预测是…

【简单介绍下K-means聚类算法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

​面试经典150题——从前序与中序遍历序列构造二叉树

​ 1. 题目描述 2. 题目分析与解析 二叉树的前序、中序和后序遍历 二叉树的前序、中序和后序遍历是树的三种基本遍历方式&#xff0c;它们是通过不同的顺序来访问树中的节点的。 前序遍历&#xff08;Pre-order traversal&#xff09;&#xff1a; 访问根节点 前序遍历左子树…

Linux-Stunnel介绍

1、定义 Stunnel是一个自由的跨平台软件&#xff0c;用于提供全局的TLS/SSL服务。针对本身无法进行TLS或SSL通信的客户端及服务器&#xff0c;Stunnel可提供安全的加密连接。该软件可在许多操作系统下运行&#xff0c;包括Unix-like系统&#xff0c;以及Windows。Stunnel依赖于…