【CT】LeetCode手撕—54. 螺旋矩阵

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐54. 螺旋矩阵——题解思路
  • 3- ACM实现

题目

  • 原题连接:92. 反转链表 II

1- 思路

  • 模式识别:螺旋矩阵 ——> 用四个指针来顺时针遍历

2- 实现

⭐54. 螺旋矩阵——题解思路

在这里插入图片描述

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();

        // 定义四个指针
        int left = 0;
        int right = matrix[0].length-1;
        int top = 0;
        int bottom = matrix.length-1;

        while(true){

            for(int i = left ; i <= right;i++){
                res.add(matrix[top][i]);
            }
            top++;
            if(top>bottom) break;

            for(int i = top;i<= bottom;i++){
                res.add(matrix[i][right]);
            }
            right--;
            if(left>right) break;

            for(int i = right ; i>= left;i--){
                res.add(matrix[bottom][i]);
            }
            bottom--;
            if(bottom<top) break;

            for(int i = bottom ; i>=top;i--){
                res.add(matrix[i][left]);
            }
            left++;
            if(left>right) break;
        }
        return res;
    }
}

3- ACM实现

public class spiralOrder {

    public static List<Integer>  spiral(int[][] matrix){
        List<Integer> res = new ArrayList<>();
        // 四个指针
        int left = 0;
        int right = matrix[0].length-1;
        int top = 0;
        int buttom = matrix.length-1;

        // 2. 开始遍历
        while(true){

            // 第一行
            for(int i = left;i<=right;i++){
                res.add(matrix[top][i]);
            }
            top++;
            if(top>buttom) break;

            // 右侧第一列
            for(int i = top;i<=buttom;i++){
                res.add(matrix[i][right]);
            }
            right--;
            if(right<left) break;

            // 底下一行
            for(int i = right; i>= left;i--){
                res.add(matrix[buttom][i]);
            }
            buttom--;
            if(buttom<top) break;

            // 左侧一列
            for(int i = buttom;i>=top;i--){
                res.add(matrix[i][left]);
            }
            buttom--;
            if(buttom<top) break;
        }
        return res;
    }


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入二维数组的行");
        int m = sc.nextInt();
        System.out.println("输入二维数组的列");
        int n = sc.nextInt();
        int[][] matrix = new int[m][n];
        System.out.println("输入二维数组的元素");
        for (int i = 0 ; i < m;i++){
            for(int j = 0 ; j < n ;j++){
                matrix[i][j] = sc.nextInt();
            }
        }
        List<Integer> forRes = spiral(matrix);
        for(int i : forRes){
            System.out.print(i+" ");
        }
    }
}

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

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

相关文章

RuoYi Swagger请求401

问题描述&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 使用ruoyi-vue分离版&#xff0c;访问swagger&#xff0c;发现接口都调用失败&#xff1a;401 解决方案&#xff1a; 最终解决问题如下步骤&#xff1a; 1、 调用swagger中的接口&#xff0c;报错&a…

QT MQTT (二)编译与集成

一、QT MQTT 提供 MQTT 客户端服务的 Qt 专用库基于标准化发布 / 订阅协议&#xff0c;用于在设备和组件之间可靠地共享数据。MQTT 是为保证状态正确性、满足高安全标准和交换最小数据而设计的协议&#xff0c;因此被广泛应用于各种分布式系统和物联网解决方案中。 Qt开发MQT…

修改源码,打patch包,线上环境不生效

1.首先看修改的源码文件是否正确 在node_modules中&#xff0c;找对应的包&#xff0c;然后查看包中package.json 的main和module。如果用require引入&#xff0c;则修改lib下面的组件&#xff0c;如果是import引入则修改es下面的文件 main 对应commonjs引入方式的程序入口文件…

WPF 数据分组显示

WPF 数据分组显示 效果展示&#xff1a; Student类&#xff1a; public class Student {public string Name { get; set; }public string Class { get; set; }public int Age { get; set; } }MainWindow.xaml.cs public partial class MainWindow : Window {private Observ…

数据结构-图的基本概念

图的定义 图时由非空的顶点集合和一个描述顶点之间关系的集合组成。可以定义为&#xff1a; ​​​​​​​ ​​​​​​​ ​​​​​​​ G表示一个图&#xff0c;V表示点集&#xff0c;E表示边集。集合E的每一个二元组都包含两个值和&#xff0c;表示…

超薄续航,加量不加厚,这款手机甩某果几条街!

据微博知名数码博主爆料&#xff0c;一加即将推出的Ace3 Pro将搭载革命性的“冰川电池”&#xff0c;这是一款6100mAh容量的先进电池&#xff0c;比传统5000mAh电池薄0.49毫米&#xff0c;仅5.51毫米厚&#xff0c;且支持100W快充&#xff0c;可在30分钟内充满。 &#xff08;比…

设计软件有哪些?粒子插件篇,渲染100邀请码1a12

设计师常常需要设计特效&#xff0c;而粒子系统是必不可少的&#xff0c;这次我们简单介绍一些粒子插件。 1、ComplexFresnel ComplexFresnel插件是一款用于计算机图形渲染中的增强型菲涅尔效应模拟工具。它扩展了传统的菲涅尔效应模型&#xff0c;考虑了更多的光学参数&…

R语言——绘图与数据可视化

1、练习将25个点的符号绘制出来&#xff0c;然后用rainbow()返回25个颜色&#xff0c;后5个符号形状的背景颜色用蓝色填充&#xff0c;图的标题为"符号图"&#xff0c;x轴标题为符号索引&#xff0c;y轴标题为符号形状。 2、根据员工的销售业绩画饼状图&#xff0c;添…

【AI】AI在创造还是毁掉音乐?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

嵌入式学习真的这么烧钱吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;在我的学习过程中身边有不…

Java宝藏实验资源库(4)对象数组

一、实验目的 学习面向对象程序设计的方法。学习建立对象数组的方法。 学习在数组中存储和处理对象。 二、实验内容、过程及结果 **10.7 (Game: ATM machine) Use the Account class created in Programming Exer cise 9.7 to simulate an ATM machine. Create ten accou…

MAC地址解析工具:ARP命令

网络中每台设备都有一个唯一的网络标识&#xff0c;这个地址叫MAC地址或网卡地址&#xff0c;由网络设备制造商生产时写在硬件内部。形象地说&#xff0c;MAC地址就如同身份证上的身份证号码&#xff0c;具有唯一性。 无论是局域网&#xff0c;还是广域网中的计算机之间进行通信…

Windows系统下安装RabbitMQ详细步骤

声明&#xff1a;原文参考链接出自&#xff1a; 如何在Windows系统下安装RabbitMQ_rabbitmq windows安装-CSDN博客 https://zhuanlan.zhihu.com/p/693160757 一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的…

小程序大作为|小程序开发详细流程,新手也能轻松掌握

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;因其无需下载安装、即点即用、用完即走的特点&#xff0c;受到了广大用户的青睐。那么开发小程序都有哪些开发流程呢&#xff1f;可以用哪种方式开发&#xff1f;选择合适的开发方式&#xff0c;一起…

java连接mysql报错

1.背景&#xff0c;直接升级操作系统从centos-》国产化操作系统&#xff0c;mysql也升级到5.7.44 2&#xff0c;报错 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconn…

如何使用 ArcGIS Pro 和 Landsat 8 影像计算叶绿素指数和全球环境监测指数

GIS 工具和技术的出现极大地帮助了识别、量化和解决问题。GIS 还通过研究可能的情况并实施预防方案提供了一种主动的解决方案。多年来&#xff0c;GIS 通过电信和网络服务、事故/事件分析、城市规划、交通规划、环境影响评估、洪水损失估计、自然资源管理、环境健康和安全、植被…

【STM32-DAP 仿真器】

STM32-DAP 仿真器 ■ STM32-DAP仿真器介绍■ STM32-DAP仿真特点■ STM32-DAP仿真器实物图■ STM32-DAP高速 DAP 仿真器实物图■ STM32-DAP高速无线调试器 实物图■ STM32-DAP高速无线调试器示意图■ STM32-DAP高速无线调试器接线图■ STM32-DAP高速无线调试器接收端示意图 ■ S…

oracle开放某些视图给特定用户,查询报视图不存在问题

以sysdba身份登录到Oracle数据库。 创建新用户。例如&#xff0c;创建一个名为new_user的用户&#xff0c;密码为password&#xff1a; CREATE USER new_user IDENTIFIED BY password;为新用户分配表空间和临时表空间。例如&#xff0c;将表空间users和临时表空间temp分配给新…

循环的三种写法

一、for(i): for (int i0;i< arrayList.size();i){System.out.println(arrayList.get(i));} 最基本的循环方法。 二、for-each: 又称加强for &#xff0c;更简单的遍历集合。 三、迭代器: 迭代器是调用Java中的Iterator接口&#xff0c;该接口定义了三个方法分别是hasNex…

阿里云PAI主机网页访问测试

笔者使用的阿里云平台PAI主机(首次使用免费三个月额度)&#xff0c;由于其默认不设置公网IP&#xff0c;所以在该主机上启动HTTP服务后无法访问测试。 这里使用ssh来作隧道穿透&#xff0c;首先需要配置ssh。 云主机配置ssh 1. 修改root账号密码 在云主机上执行 passwd ro…