力扣 54.螺旋矩阵

题目描述

给你一个 m 行 n 列的矩阵 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

题解:

之前大一小学期做过类似的题,依稀记得需要很多的判断是否拐弯和拐弯之后要怎么操作的数组变量,于是试着写了一下,其实不难,但是需要找到规律,在第一圈的右下左上的时候有点特殊,就是左之后就需要进行stepx--和stepy--了,stepx和stepy是指示在x轴和y轴的该次移动需要总共走过多少步,比如示例2的1->2->3->4的这次移动的stepy就是3,4->8->12这次移动的stepx就是2,在走到9之后,就需要更新stepx和stepy了,将其自减。而在其他圈的循环过程中,每两次转弯进行一次stepx--和stepy--即可。规律不难找,可以自己画画试一下。

判断循环结束的条件就使用现在遍历输出到list中的数据大小和数组大小相同作为结束变脸的条件。

击败了1.2%的用户,不过这坨代码终究是过了。

代码实现

class Solution {public List<Integer> spiralOrder(int[][] matrix) {
//控制方向:右下左上int[][] derection = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};//初始化y轴方向的行走距离int stepy = matrix[0].length-1; //3//初始化x轴方向的行走距离int stepx = matrix.length-1;// 2(实际在“左”之后就要更新--)int cur = 0;//记录当前的行走方向 0-右 1-下 2-左 3-上//设置一个记录现在走了多少步的countint count = 1;//记录现在遍历到的数组元素List<Integer> list = new ArrayList<>();list.add(matrix[0][0]);int startx =0;int starty = 0;int posx = 0;int posy  =0;int size = matrix.length*matrix[0].length;//记录圈数int r = 1;//记录现在拐了几次int c = 0;//System.out.println("数组的大小:"+size);while(count!=size){for(cur = 0;cur<=3;cur++){//向右走if(cur==0){for (int i = 0; i < stepy; i++) {posx+=derection[0][0];posy+=derection[0][1];list.add(matrix[posx][posy]);++count;System.out.println(count);if(count==size){break;}}}//向下走else if(cur == 1){for (int i = 0; i < stepx; i++) {posx+=derection[1][0];posy+=derection[1][1];list.add(matrix[posx][posy]);++count;if(count==size){break;}}}//向左走else if(cur==2) {for (int i = 0; i < stepy; i++) {posx += derection[2][0];posy += derection[2][1];list.add(matrix[posx][posy]);++count;if(count==size){break;}}//向左走完之后需要更新stepx和stepyif(r==1) {stepx -= 1;stepy -= 1;c=-1;System.out.println("现在该位置完成第三次拐弯,并且将stepx/y-1,c置0 "+stepx+" "+stepy+" "+c);}}//向上走else{for (int i = 0; i < stepx; i++) {posx += derection[3][0];posy += derection[3][1];list.add(matrix[posx][posy]);++count;if(count==size){break;}}}c++;if(c==2&&r!=1){stepx--;stepy--;c=0;}if(count==size){break;}}System.out.println(r+"圈的stepx和stepy等于:"+stepx+" "+stepy);r++;// System.out.println("第一圈走完了,现在的count = "+count);}return list;}
}

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

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

相关文章

什么是Spark RDD?(RDD的介绍与创建)

什么是Spark RDD&#xff1f;(RDD的介绍与创建) 一、RDD介绍 1、特点2、RDD的存储和指向3、RDD与DAG4、RDD的特性5、RDD分区6、RDD操作类型 二、RDD创建 1、引入必要的 Spark 库2、配置 Spark3、RDD创建4、示例代码 一、RDD介绍 RDD: 弹性分布式数据集&#xff08;Resilient…

【PCB]射频电路pcb设计

学习改变命运&#xff0c;技能成就未来&#xff01;❤~~ 1射频信号的基础知识及工作原理介绍 射频的基础知识介绍 2射频板PCB的布局要求 3射频板布局要求 4屏蔽帐设计 5射频板的层叠阻抗设计 6射频板的PCB布线原则 7射频板的PCB布线要求 8射频板的设计实战

10个令人惊叹的Python自动化脚本

大家好&#xff0c;Python凭借其简单和通用性&#xff0c;能够为解决每天重复同样的工作提供最佳方案。本文将介绍10个Python自动化脚本&#xff0c;可以帮助自动化完成任务&#xff0c;提高工作效率&#xff0c;它们可以成为项目运行中的便捷工具&#xff0c;可以收藏这些脚本…

AI办公自动化:用kimi批量提取音频中的标题并重命名

很多音频文件&#xff0c;文件名很乱&#xff0c;需要根据音频信息中的标题聪明吗 在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;一步步的思考&#xff0c;完成以下脚本的撰写&#xff1a; 打开文件夹&#xff1a;E:\有声\a16z播客 读取里面所有的mp3格…

ARM的工作模式

ARM的几种工作模式 User : 非特权模式&#xff0c;大部分任务执行在这种模式 FIQ : 当一个高优先级&#xff08;fast) 中断产生时将会进入这种模式IRQ : 当一个低优先级&#xff08;normal) 中断产生时将会进入这种模式 Supervisor&#xff08;SVC&#xff09; : 当复位或软中断…

GPT-4 Turbo 和 GPT-4 的区别

引言 人工智能&#xff08;AI&#xff09;领域的发展日新月异&#xff0c;OpenAI 的 GPT 系列模型一直是这一领域的佼佼者。GPT-4 和 GPT-4 Turbo 是目前市场上最先进的语言模型之一。本文将详细探讨 GPT-4 和 GPT-4 Turbo 之间的区别&#xff0c;以帮助用户更好地理解和选择适…

vue3中 window绑定scroll事件滚动页面获取不到e.target.scrollTop

遇到的问题 vue3项目 onMounted(() > {window.addEventListener(scroll, (e) > {console.log(e.target.scrollTop)}) })想要监听页面中的滚动&#xff0c;然后获取滚动距离实现一些功能&#xff0c;发现event参数中获取不到e.target.scrollTop&#xff08;印象中以前使…

React项目目录结构与组件基础结构

在React中开发项目并扩展组件时&#xff0c;一个清晰合理的目录结构是至关重要的。它不仅可以帮助你更好地组织代码&#xff0c;还能提高项目的可维护性和扩展性。下面是一个基本的React项目目录结构大纲&#xff0c;你可以根据自己的项目需求进行调整&#xff1a; my-app/ ├…

面试被问准备多久要孩子?这样回答

听说有人面试被问到多久要孩子的问题&#xff0c;当时觉得很尴尬&#xff0c;不知如何回答&#xff0c;怕回答的不好不被录用&#xff0c;其实你可以这样回答&#xff0c;让面试官心满意足。 A 面试官&#xff1a;结婚了吗&#xff1f; 我&#xff1a;结婚了 面试官&#xff1…

Vuforia AR篇(六)— Mid Air 半空识别

目录 前言一、什么是Mid Air&#xff1f;二、使用步骤三、示例代码四、效果 前言 增强现实&#xff08;AR&#xff09;技术正在改变我们与数字世界的互动方式。Vuforia作为先进的AR开发平台&#xff0c;提供了多种工具来创造引人入胜的AR体验。其中&#xff0c;Mid Air功能以其…

俄罗斯人有哪些常用的口头禅,柯桥零基础俄语培训

Хватит! 够了&#xff01; -Хватит, не стоит больше шуметь! 够了, 不要再吵了! -Это тебя не касается! 这与你无关&#xff01; Блин! 靠&#xff01; Блин这个词绝对是俄罗斯人最爱用的口语表达之一&#xff0c;…

右键Open with VSCode打开Vue3项目

之前看到一些同事能够对项目根目录进行右键打开项目到 Microsoft VS Code &#xff0c;当时觉得挺不错的&#xff0c;于是乎今天自己折腾了一遍。 目录 1、创建vue3项目 2、更改注册表 # 打开注册表编辑器&#xff08;Registry Editor&#xff09; # 导航到以下注册表路径 …

前端_防抖节流

目录 一、防抖&#xff08;debounce&#xff09; 1.使用场景 2.js代码实现 3.lodash工具库使用 二、节流&#xff08;throttle&#xff09; 1.使用场景 2.js代码实现 3.lodash工具库使用 前端做项目&#xff0c;为了防止用户因为网络不好数据响应慢&#xff0c;导致进行…

信不信,马上教会你Purple Pi OH开发板之ADB常用命令

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙开…

C#-Switch判断分支语句

Switch判断分支语句 作用 &#xff1a; 让顺序执行的代码 产生分支 判断变量和常量相同时 才会执行 用法: Switch后面的变量值与case后面的常量相同时&#xff0c;case内的代码才会执行&#xff0c;如果都不满足则执行default内的代码 break的作用: 跳出 不会再执行判断 …

SQL学习小记(五)解决python连接Oracle数据库出现的问题

python运行时出现错误DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified module could not be 解决python连接Oracle数据库出现的问题 1. 配置本地Oracle的path2. python10的详细安装过程2.1. python10下载2.2. python10安装2.3.额外操作 3. python 安…

纷享销客BI典型场景案例解析

本章以具体案例来说明纷享销客一体化BI智能分析平台为企业在实际使用过程中带来的价值。 1)场景一&#xff1a;销售经理想要在周会上关注各销售人员的客户及订单情况&#xff0c;并在每周一上午9点可以把上周的整体情况周期性的将报表推送给相关销售人员。 具体图表展示样式及…

BIO 探究二

接上文 BIO 初探究 文章目录 前言一、使用netty二、nio 客户端 与 bio 服务端&#xff0c;bio 服务端 与 nio 客户端总结# 未完待续 前言 提示&#xff1a;验证阻塞到底阻塞在什么地方 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、使用netty 上…

当企业越来越难做,精益变革能带来什么改变?

随着技术的不断进步和消费者需求的日益多样化&#xff0c;传统的管理模式和生产方式已经难以适应时代的发展。越来越多的企业开始陷入困境&#xff0c;难以在激烈的市场竞争中立足。然而&#xff0c;正是在这样的背景下&#xff0c;精益变革应运而生&#xff0c;为企业带来了前…

使用html2canvas和jspdf导出pdf包含跨页以及页脚

首先要下载两个文件&#xff0c;一个为html2canvas.min.js&#xff0c;另一个是jspdf.umd.min.js这两个文件分别下载的地址我也附录上&#xff0c;都在官网git&#xff1a; html2canvas.min.js: https://html2canvas.hertzen.com/dist/html2canvas.min.js jspdf.umd.min.js: …