刷题之Leetcode54题(超级详细)

news2024/11/26 9:37:31

54. 螺旋矩阵

54. 螺旋矩阵 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/spiral-matrix/submissions/521329682/

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

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
1
2
示例 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]
1
2
提示:

m == matrix.length

n == matrix[i].length

1 <= m, n <= 10

-100 <= matrix[i][j] <= 100

题解

这题和59. 螺旋矩阵 II差不多,但是因为行和列不同变得更复杂一些。

如果要了解59. 螺旋矩阵 II,可以去看刷题之Leetcode59题(超级详细)-CSDN博客这篇博客

相对于59. 螺旋矩阵 II而言,有些改变:

循环的次数等于行和列中的最小值除以2

当行和列中的最小值是奇数,则会有没有遍历到的位置

如果行数大于列数,则会产生中间列没有遍历
如果列数大于等于行数,则会产生中间行没有遍历
中间行或中间列的位置mid = 行和列中的最小值除以二的值

中间行的最大下标的下一位为mid + 列数 - 行数 + 1

中间列的最大下标的下一位为mid + 行数 - 列数 + 1

从上到下列的终止条件是小于列数 - 停止下标(offSet)

从左到右遍历行的终止条件是小于行数 - 停止下标(offSet)

相同的地方是:从右向左遍历行和从下向上遍历列的终止条件都是大于遍历起点start
每次遍历完start++,offSet++
代码

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        //存放数组的数
        List<Integer> ans = new ArrayList<>();
        //列数
        int columns = matrix[0].length;
        //行数
        int rows = matrix.length;
        //遍历起点
        int start = 0;
        //循环的次数 行数和列数中的最小值除以二
        int loop = Math.min(rows,columns) / 2;
        //未遍历的中间列(行)的列(行)下标
        int mid = loop;
        //终止条件
        int offSet = 1;
        int i,j;
        while(loop-- > 0) {
            //初始化起点
            i = j = start;
            
            //从左往右
            for(; j < columns - offSet; j++)
                ans.add(matrix[i][j]);

            //从上往下
            for(; i < rows - offSet; i++)
                ans.add(matrix[i][j]);

            //从右往左
            for(; j > start; j--)
                ans.add(matrix[i][j]);
            
            //从下往上
            for(; i > start; i--)
                ans.add(matrix[i][j]);

            //每循环一次 改变起点位置
            start++;
            //终止条件改变
            offSet++;
        }

        //如果行和列中的最小值是奇数 则会产生中间行或者中间列没有遍历
        if(Math.min(rows,columns) % 2 != 0) {
            //行大于列则产生中间列
            if(rows > columns) {
                //中间列的行的最大下标的下一位的下标为mid + rows - columns + 1
                for(int k = mid; k < mid + rows - columns + 1; k++) {
                    ans.add(matrix[k][mid]);
                }
            }else {//列大于等于行则产生中间行
                //中间行的列的最大下标的下一位的下标为mid + columns - rows + 1
                for(int k = mid; k < mid + columns - rows + 1; k++) {
                    ans.add(matrix[mid][k]);
                }
            }
        }
        return ans;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建基于Hexo的个人博客

测试命令 hexo clean hexo g hexo s 上传命令 hexo clean hexo g hexo d 一、安装hexo 参考B站CodeSheep视频&#xff1a;手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo_哔哩哔哩_bilibili 安装node.js nodejs.org下载长期支持版 用管理员身份进入powersh…

全排列与全错排列

import java.util.Arrays; import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代码...long f10;long f21;long temp0;for (int i 3;…

提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧

在云原生应用开发中&#xff0c;数据库的高可用性和数据一致性是至关重要的。MySQL作为一种常用的关系型数据库&#xff0c;在云原生环境中的部署和管理也变得愈发重要。本教程将介绍如何使用Helm一键部署MySQL 8.0的主从复制架构&#xff0c;以实现数据库的高可用和数据备份。…

官网下载IDE插件并导入IDE

官网下载IDEA插件并导入IDEA 1. 下载插件2. 导入插件 1. 下载插件 地址&#xff1a;https://plugins.jetbrains.com/plugin/21068-codearts-snap/versions 说明&#xff1a;本次演示以IDEA软件为例 操作&#xff1a; 等待下载完成 2. 导入插件 点击File->setting->Pl…

白帽工具箱:初识Metasploit Framework(MSF)渗透测试框架

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…

实验4 DHCP基础配置

实验4 DHCP基础配置 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤1.基本配置2.配置DHCPServer功能3.配置DHCP Client 一、 原理描述 动态主机配置协议 DHCP是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;主要有两个用途&#xff1a;用…

昨天,“支付宝崩了”上热搜; 4 月编程语言排行榜:PHP 跌至历史最低点;老乡鸡 “开源” 了;微信 WCDB 迎来重大升级

0、支付宝崩了”上热搜&#xff0c;官方回应&#xff1a;短暂性访问不畅&#xff0c;已经快速恢复 昨日&#xff0c;有许多网友反映支付宝无法使用&#xff0c;用不了蚂蚁能量收集等功能&#xff0c;#支付宝崩了# 话题冲上微博热搜。 支付宝客服人员回应称&#xff0c;确实有系…

HJ102 字符统计(字符串,TreeMap,TreeMap是按照自身的顺序排序,比如数字的话,按照数字升序,ascII等。)

TreeMap是按照自身的顺序排序&#xff0c;比如数字的话&#xff0c;按照数字升序&#xff0c;ascII等。 import java.util.Scanner; import java.util.TreeMap;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] arg…

全志V851se开发板TinyVision镜像制作快速启动教程

制作系统启动镜像​ 烧写系统​ 硬件&#xff1a;TinyVision主板 x1硬件&#xff1a;TypeC-SUB x1硬件&#xff1a;TF卡读卡器 x1硬件&#xff1a;8GB以上的 Micro TF卡 x1软件&#xff1a;Tina系统TF卡烧录工具: PhoenixCard-V2.8软件&#xff1a;TinaTF卡最小系统镜像&…

福特长安福特 福克斯 2013款 两厢经典 1.8L MT基本型

http://www.huanqiuauto.com/cars/656021/ 【两厢经典 1.8L MT基本型_福克斯_报价_参数_油耗_图片】 好像还要加92的汽油这个方面就很难受 3.相关的测试和相关的说明信息 沿袭了福特 WRC赛车滴纯正血统&#xff0c;容易驾驭操控。使用福特C3P系统设计的后悬挂系统和强化底盘&…

Day36:LeedCode 435. 无重叠区间 763.划分字母区间 56. 合并区间 蓝桥杯 管道

435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下的区间…

基于Dell 3930 RACK服务器的RAID1配置

**背景&#xff1a;**项目上使用的Dell 3930 RACK服务器需要配置RAID1冗余备份功能&#xff0c;设置比较简单&#xff0c;此处也做个记录&#xff0c;以免忘记。 步骤&#xff1a; 1、重启服务器&#xff0c;启动过程中按F12&#xff0c;进入设置界面 2、先选中进入BIOS Setup…

maven中两个打包命令的区别:install命令与package命令

package命令&#xff1a;        将项目打包&#xff08;jar/war&#xff09;&#xff0c;将打包结果放到项目下的 target 目录下 install命令&#xff1a;        1. 将项目打包&#xff08;jar/war&#xff09;&#xff0c;将打包结果放到项目下的 target 目录…

汪静波谈全球资产配置策略:洞悉大势,智绘未来

在全球经济一体化的今天,如何进行科学合理的全球资产配置,成为了投资者必须面对的重要课题。诺亚财富的创始人汪静波女士,以其专业的视角和丰富的经验,为我们提供了宝贵的建议。 汪静波女士认为,全球资产配置的核心在于洞悉大势、把握机遇。她指出,在当前全球经济不确定性增加的…

Vue - 4( 8000 字 Vue 入门级教程)

一&#xff1a; Vue 初阶 1.1 关于不同版本的 Vue Vue.js 有不同版本&#xff0c;如 vue.js 与 vue.runtime.xxx.js&#xff0c;这些版本主要针对不同的使用场景和需求进行了优化&#xff0c;区别主要体现在以下几个方面&#xff1a; 完整版 vs 运行时版&#xff1a; vue.js&…

无货源,0基础做电商,6个选品逻辑快速出单!

首先我们要先解决货源问题&#xff0c;再来谈选品逻辑。初入电商行业&#xff0c;进货渠道建议使用1688。首先1688是国内最大的B2B批发平台&#xff0c;平台服务和安全性都提供了一定的保障&#xff0c;以及丰富的货源选择。你可以浏览不同供应商的产品&#xff0c;对比价格、质…

SCI期刊“on hold”状态是什么意思?

“on hold”状态是什么&#xff1f; 期刊“on hold”直译为“暂停服务”&#xff0c;表示科睿唯安担忧该期刊所发表内容的质量&#xff0c;并决定根据标准进行重新评估。在重新评估过程中&#xff0c;新的内容将不会被索引。 当评估完成后&#xff0c;该期刊将有两种可能的结果…

SpringBoot集成Skywalking日志收集

在实际项目中&#xff0c;为了方便线上排查问题&#xff0c;尤其是微服务之间调用链路比较复杂的系统中&#xff0c;通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段&#xff0c;比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式&#xff0c;在skywalkin…

OpenCV-python安装教程

先安装opencv-contrib-python pip install opencv-contrib-python 再换源安装opencv-python pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 如果出现 使用这个&#xff0c;3.6环境下不能安装opencv的最新版本 pip install opencv-python4.5.5.62…

AI论文速读 | 线性时间序列预测模型分析

论文标题&#xff1a;An Analysis of Linear Time Series Forecasting Models 作者&#xff1a; William Toner&#xff0c; Luke Darlow 机构&#xff1a;爱丁堡大学&#xff08;Edinburgh&#xff09;&#xff0c;华为研究中心&#xff08;爱丁堡&#xff09; 论文链接&am…