【leetcode hot 100 54】螺旋矩阵

news/2025/3/6 20:14:21/

错误解法:以轮数定义旋转过程进行输出

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new LinkedList<>();int round=0; // 已经循环的轮数int i=0,j=0;int m=matrix.length, n=matrix[0].length;while(round==0||round<Math.min(m,n)/2){// 👉while(j<n-round){list.add(matrix[i][j]);j++;}// 👇j--;i++;while(i<m-round){list.add(matrix[i][j]);i++;}// 👈i--;j--;while(j>=round){list.add(matrix[i][j]);j--;}// 👆j++;i--;while(i>=round+1){list.add(matrix[i][j]);i--;}i++;j++;round++;}while(j<n-round){list.add(matrix[i][j]);j++;}return list;}
}

错误原因:不适合只有行的数组

在这里插入图片描述

解法一:对上面方法进行改进,更改循环结束的判断。

**如何判断路径是否结束?**由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new LinkedList<>();int round=0; // 已经循环的轮数int len=0; // 路径长度int i=0,j=0;int m=matrix.length, n=matrix[0].length;// 👉while(j<n-round){list.add(matrix[i][j]);j++;}while(true){// 👇j--;i++;while(i<m-round){list.add(matrix[i][j]);i++;if(list.size()>=n*m){break;}}if(list.size()>=n*m){break;}// 👈i--;j--;while(j>=round){list.add(matrix[i][j]);j--;if(list.size()>=n*m){break;}}if(list.size()>=n*m){break;}// 👆j++;i--;while(i>=round+1){list.add(matrix[i][j]);i--;if(list.size()>=n*m){break;}}if(list.size()>=n*m){break;}// 👉i++;j++;while(j<n-round-1){list.add(matrix[i][j]);j++;if(list.size()>=n*m){break;}}if(list.size()>=n*m){break;}round++;}return list;}
}

注意:

  • 在每一次向list中加入数据,都判断是否到达指定数目,到达则break

http://www.ppmy.cn/news/1577161.html

相关文章

yum修改阿里云

第一步&#xff1a;打开FinalShell&#xff0c;点击haodoop100&#xff0c;输入命令&#xff1a; sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 第二步&#xff1a;继续输入命令&#xff1a;sudo yum clean all …

前端基础之浏览器本地存储

如我们在一些网站中&#xff0c;去进行数据搜索&#xff0c;在浏览器中是有一个对于的存储的&#xff0c;并且我们可以去手动进行value的增删操作 LocalStroage的使用 并且将浏览器关闭之后&#xff0c;数据也会保存&#xff0c;除非用户手动清理数据或是清空缓存 <!DOCTYPE…

2022 年学习 Spring Boot 开发的最佳书籍

在我们之前的文章中&#xff0c;我们查看了学习 Java 编程的必读书籍我们在其中探索了一些您可以利用的资源来加快 Java 开发的速度。在此基础上&#xff0c;在用 vanilla Java 编写一段时间后&#xff0c;您将意识到组织文件和其他内容&#xff08;例如设置 getter 和 setter、…

SSE 和 WebSocket 的对比

SSE 和 WebSocket 的对比 在现代Web开发中&#xff0c;实时通信是提升用户体验的重要手段。Server-Sent Events&#xff08;SSE&#xff09;和WebSocket是两种实现服务器与客户端之间实时数据传输的技术&#xff0c;但它们在功能、适用场景以及实现方式上有所不同。 1. 基本概…

Linux驱动开发之ADC驱动与基础应用编程

目录 ADC简介 SARADC 设备树配置 IIO子系统 应用程序编写 运行测试 ADC简介 模拟量指的是表示各种实际信息的物理量&#xff0c;可以是电量&#xff08;如电压&#xff0c;电流等&#xff09;&#xff0c;也可以是来自传感器的非电量&#xff08;如压力&#xff0c;温度…

Enterprise Architect 16 下载、安装与无限30天操作

文章目录 Enterprise Architect 16 简介&#xff08;一&#xff09;支持多种建模语言和标准&#xff08;二&#xff09;强大的版本控制、协作和文档管理功能&#xff08;三&#xff09;增强的技术和用户体验&#xff08;四&#xff09;高级功能和扩展性 一&#xff0c;下载软件…

Redis设计与实现-数据结构

Redis数据结构 1、RedisObject对象2、简单动态字符串2.1 SDS定义2.2 SDS与C语言的区别2.3 SDS的空间分配策略2.3.1 空间预分配2.3.2 惰性空间释放 2.4 SDS的API 3、链表3.1 链表的定义3.2 链表的API 4、字典4.1 字典的定义4.2 哈希算法4.3 哈希表的扩缩4.3.1 哈希表扩缩的判断依…

【三维生成】StarGen:基于视频扩散模型的可扩展的时空自回归场景生成

标题&#xff1a;《StarGen: A Spatiotemporal Autoregression Framework with Video Diffusion Model for Scalable and Controllable Scene Generation》 项目&#xff1a;https://zju3dv.github.io/StarGen 来源&#xff1a;商汤科技、浙大CAD、Tetras.AI 文章目录 摘要一、…