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

2023-11-13

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 题目

(一) 题干

        给定一个包含 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,2,3,4,8,12,11,10,9,5,6,7]

二. 题解

(一) 思路

        又是一道数组的模拟题目,最简单的方法就是按照顺时针的顺序模拟一遍,总共4个方向,右,下,左,上。在每个拐角处转变方向,注意不同的拐角处处理方式不同,且螺旋的范围是不断缩小的,这一点是重点。

(二) 代码实现

Java:

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list = new ArrayList<>();
        if(matrix==null || matrix.length == 0){
            return list;
        }
        int mIndex = matrix.length-1;
        int nIndex = matrix[0].length-1;
        int m = mIndex; //变化的最大行索引
        int n = nIndex; //变化的最大列索引
        int direction = 1;
        int i = 0, j = 0;   //i行坐标,j纵坐标
        for(int k = 0; k < matrix.length * matrix[0].length; ++k){
            list.add(matrix[i][j]);

            if(direction == 1){
                if(j == n){
                    direction = 2;
                    i++;
                }else{
                    j++;
                }
                continue;
            }

            if(direction == 2){
                if(i == m){
                    direction = 3;
                    j--;
                }else{
                    i++;
                }
                continue;
            }

            if(direction == 3){
                if(j == nIndex-n){
                    direction =4;
                    m--;
                    n--;
                    i--;
                }else{
                    j--;
                }
                continue;
            }

            if(direction == 4){
                if(i == mIndex - m){
                    direction = 1;
                    j++;
                }else{
                    i--;
                }
                continue;
            }
        }
        return list;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 计组cpi与mips的计算方法

    cpi CPI Clock cycle Per Instruction 表示每条计算机指令执行所需的时钟周期 有时简称为指令的平均周期数 可以用来表示CPU的性能 补充一下时钟周期的概念 1个时钟脉冲所需要的时间 在计算机组成原理中又叫T周
  • 数据结构实验--排序算法应用及对比

    一 课程设计题目与要求 排序算法应用及对比 基本要求 1 生成三组1000万个数 分别为随机数 基本正序 所有元素在正序的基础上整体左移2位 逆序 用什么数据结构 如果数据量达到1亿 10亿怎么办 2 实现快速排序 改进版 归并排序和堆排序
  • c语言鸡兔同笼的程序,C语言:鸡兔同笼问题

    鸡兔同笼 已知鸡兔总头数为h 设为30 总脚数为f 设为90 求鸡兔各几只 代码一 include main int h f x y printf 请输入总头数和总脚数 scanf d d h f x 2 h f 2 y f 2 h pri
  • 2020-2023年 近期出去面试Java的总结(持续更新)

    近期出去面试Java的总结 一 Java基础 1 Java的类加载顺序 对于有继承关系的加载顺序 2 Java的创建对象的几种方式 1 使用new关键字 2 使用反射机制 1 使用Class类的newInstance方法 2 使用Const
  • KVM初始化过程

    之前打算整理一下在Guest VM KVM QEMU中IO处理的整个流程 通过查阅资料和阅读源码 已经大致知道IO在Guest KVM中的处理流程 当想要整理IO在KVM和QEMU中的处理时 发现很难理清楚QEMU和KVM之间的跳转和交互的
  • 我一个专科生,在上海打拼10年才拿到20k的月薪,普通人逆袭有多难?

    自我介绍 我是专科毕业 在原来的领域深耕近十年又考虑转行 有家庭有娃 有房贷 所以我认为这可能代表了一类人 代表哪一类人群呢 你看 学历一般 能力有限 在大城市打拼多年又难以留下来 处在职业生涯的瓶颈期 又处在人生道路的迷茫期 就是这类人
  • codeforces 1169 D. Good Triple

    题意 有长为n的串 其中有几个 ll rr 符合条件 首先 长度超过9的串一定符合条件 枚举左端点ll 右端点控制在ll 8就行 剩下的直接加 include
  • UNIX环境高级编程 学习笔记 第十五章 进程间通信

    进程间通信可通过传送打开的文件 也可以经由fork和exec函数来传送 还可以通过文件系统传送 IPC InterProcess Communication 进程间通信 是进程通信方式的统称 不同UNIX系统支持的IPC形式不同 虽然SUS
  • net::ERR_CONNECTION_REFUSED,Network Error

    net ERR CONNECTION REFUSED 项目部署服务器后报如图所示错误 但在本地调用后台RESRful接口数据没问题 最后发现是tomcat服务器没有开 开了后没有再次执行命令使后台运行 其实这个问题从两点能够发现 一是执行n
  • 解决Anaconda导入第三方包的各种问题

    1 win R win R 输入 HOMEPATH 然后找到 condarc 把里面的内容改为 ssl verify true show channel urls true channels http mirrors tuna tsingh
  • 点云数据做简单的平面的分割 三维场景中有平面,杯子,和其他物体 实现欧式聚类提取 对三维点云组成的场景进行分割

    点云分割是根据空间 几何和纹理等特征对点云进行划分 使得同一划分内的点云拥有相似的特征 点云的有效分割往往是许多应用的前提 例如逆向工作 CAD领域对零件的不同扫描表面进行分割 然后才能更好的进行空洞修复曲面重建 特征描述和提取 进而进行基
  • Qt 事件过滤器 - EventFilter

    事件过滤器 见名之意 就是将事件过滤一遍 将不需要的事件都清除掉 剩下需要的事件进行操作 可能讲得不是很透彻 那就看下图 就很明白了 原本事件应该直接发送给 组件对象 但是现在却先将事件发送给 过滤器对象 经过过滤的事件再发给 组件对象 如
  • xss level11

    Level11 1 2 毫无头绪 查看PHP源代码发现 是从头文件的referer获取的输入 3 用Burp抓包 修改头文件如下 4 再点击Proxy界面的forward 回到浏览器页面如下 5 点击即可 转载于 https www cnb
  • 走进强化学习

    一 什么是强化学习 强化学习是机器学习里面的一个分支 是一个智能体通过不断的与环境产生互动而不断改进它的行为 从而积累最大奖励的一个决策过程 智能体在完成某项任务时 首先通过动作A与周围环境进行交互 在动作A和环境的作用下 智能体会产生新的
  • CUDA 计算线程索引的一般公式

    第一种方法 CUDA thread index int blockId blockIdx z gridDim x gridDim y blockIdx y gridDim x blockIdx x int threadId blockId
  • Couldn‘t resolve host

    Centos6安装完并配置静态ip地址后 发现yum命令下载出现Couldn t resolve host ping www baidu com 出现域名解析错误 百度大部分答案是在 etc sysconfig network script
  • 用java求出1-1/2+1/3-1/4…..1/100的和

    public class sumPractice3 public static void main String args 需求 求出1 1 2 1 3 1 4 1 100的和 分子始终为1 double num 1 定义个变量用来存储计算
  • 三个基于WebRTC开源MCU框架的横向对比

    1 licode 官网地址 http lynckia com licode index html 官方demo地址 https chotis2 dit upm es Github地址 https github com lynckia lic
  • switch的用法

    switch语句 实际生活中 需要做出很多选择 大家都知道做选择可以使用if语句 但是如果选择太多 if语句使用起来就会很繁琐 这个时候就需要一个能将代码简化的语句 也就是我们今天的主角switch语句 switch语句是一个多分支选择语句
  • 【中等】【LeetCode刷题笔记(二十九)】之54.螺旋矩阵

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