螺旋矩阵-leetcode

news/2025/9/23 10:42:50/文章来源:https://www.cnblogs.com/foxt/p/19106733

题目描述

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

示例 1:

img

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

img

输入: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

解法一

思路:

遍历存在顺序,记录起始位置和边界位置,一共m*n个数。

代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class leetcode_019 {public static List<Integer> spiralOrder(int[][] matrix) {List<Integer> res = new ArrayList<>();int m=matrix.length,n=matrix[0].length;int allcount=m*n;int i,j;int iStart=0,jStart=0;//边界值int rowBoundary=m,colBoundary=n;while(rowBoundary>=iStart&&colBoundary>=jStart){for(j=jStart,i=iStart;j<colBoundary;j++){res.add(matrix[i][j]);allcount--;}j--;if(allcount==0)break;for(i=iStart+1;i<rowBoundary;i++){res.add(matrix[i][j]);allcount--;}i--;if(allcount==0)break;for(j=j-1; j>=jStart; j--){res.add(matrix[i][j]);allcount--;}j++;if(allcount==0)break;for(i=i-1;i>iStart;i--) {res.add(matrix[i][j]);allcount--;}iStart=iStart+1;jStart=jStart+1;rowBoundary=rowBoundary-1;colBoundary=colBoundary-1;}return res;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 使用动态结构暂存数据List<int[]> matrixList = new ArrayList<>();while (scanner.hasNextLine()) {//trim()去除字符串两端空白符String line = scanner.nextLine().trim();// 空行表示输入结束if (line.isEmpty()) {break;}// 分割字符串并转换为整数数组String[] values = line.split(",");int[] row = new int[values.length];for (int i = 0; i < values.length; i++) {row[i] = Integer.parseInt(values[i].trim());}matrixList.add(row);}// 转换为二维数组int rows = matrixList.size();int cols = matrixList.get(0).length;int[][] matrix = new int[rows][cols];for (int i = 0; i < rows; i++) {matrix[i] = matrixList.get(i);}List<Integer> res = spiralOrder(matrix);for (Integer integer : res) {System.out.print(integer + " ");}}}

解法二

思路:

来自官方。可以模拟螺旋矩阵的路径。初始位置是矩阵的左上角,初始方向是向右,当路径超出界限或者进入之前访问过的位置时,顺时针旋转,进入下一个方向。判断路径是否进入之前访问过的位置需要使用一个与输入矩阵大小相同的辅助矩阵 visited,其中的每个元素表示该位置是否被访问过。当一个元素被访问时,将 visited 中的对应位置的元素设为已访问。由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。

代码:

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> order = new ArrayList<Integer>();if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return order;}int rows = matrix.length, columns = matrix[0].length;boolean[][] visited = new boolean[rows][columns];int total = rows * columns;int row = 0, column = 0;int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int directionIndex = 0;for (int i = 0; i < total; i++) {order.add(matrix[row][column]);visited[row][column] = true;int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];if (nextRow < 0 || nextRow >= rows || nextColumn < 0 || nextColumn >= columns || visited[nextRow][nextColumn]) {directionIndex = (directionIndex + 1) % 4;}row += directions[directionIndex][0];column += directions[directionIndex][1];}return order;}
}

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

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

相关文章

【第十一章】Python 调用 MySQL 全面指南:从基础到实践​ - 实践

【第十一章】Python 调用 MySQL 全面指南:从基础到实践​ - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

开源中国社区:AI驱动下的开发者生态革命

开源中国社区:AI驱动下的开发者生态革命 在数字化浪潮席卷全球的当下,开源中国社区正以一场前所未有的生态革命,重新定义开发者社区的边界与可能性。这个拥有超过1000万用户、1350万开发者的技术交流平台,正在从传…

上海网站建设制作微信莱芜房产网官网

源&#xff5c;机器之心编&#xff5c;张倩、杜伟谷歌、Meta 等科技巨头又挖了一个新坑。在文本转图像上卷了大半年之后&#xff0c;Meta、谷歌等科技巨头又将目光投向了一个新的战场&#xff1a;文本转视频。上周&#xff0c;Meta 公布了一个能够生成高质量短视频的工具——Ma…

哈尔滨网站设计哪家公司好上海贸易公司注册条件

[react] react中setState的第二个参数作用是什么呢&#xff1f; 第二个参数是一个callback函数&#xff0c;用于setState设置state的属性值成功之后的回调&#xff0c;此时调用this.state.property可以取到刚刚设置的最新的值 个人简介 我是歌谣&#xff0c;欢迎和大家一起…

住房城乡建设局网站专业制作网站电脑

ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频&#xff0c;打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时&#xff0c;其实际发生了下面的流程&#xff1a; 其中客户端就是你的浏览器啦&#xff0c;服务器就是远程一个存放视频或…

冠县网站建设多少钱网站开发手机模拟器

推荐阅读时间&#xff1a;8min~15min主要内容&#xff1a;卷积神经网络《Convolutional Neural Networks》是Andrw Ng深度学习专项课程中的第四门课。这门课主要介绍卷积神经网络&#xff08;CNN&#xff09;的基本概念、模型和具体应用。该门课共有4周课时&#xff0c;所以我将…

做影视网站须要注意什么网站上做旅游卖家要学什么软件

lambda体中有受检异常,为什么不能在lambda表达式外层try catch,只能在lambda里面try catch xxx.getUpdateList().forEach((map) ->{xxxVO vo new xxxVO();BeanUtils.populate(vo,map); // populate方法往外抛了异常list.add(vo);});因为lambda表达式本身没有处理异常的机制…

百度站长 添加网站深圳龙华邮政编码是多少

MrDoc知识文档平台是一款基于Python开发的在线文档系统&#xff0c;适合作为个人和中小型团队的私有云文档、云笔记和知识管理工具&#xff0c;致力于成为优秀的私有化在线文档部署方案。我现在主要把markdown笔记放在上面&#xff0c;因为平时老是需要查询一些知识点&#xff…

网站建设网页与数据库连接中国建设银行官网招聘

1,其实自来水石出来的水是干净的,但是在运输到我们家的过程中      是不排除会造成二次污染的,比如管道材料故障,小区二次加压等环节      都可能带来虫卵,铁锈,泥沙等污染物,      2,不光咱们的自来水会有这种情况,很多欧美国家的饮用水,      也都需要自己 再…

怎么做网站8uftpwordpress 安全选项

一、需要自己安装PHP和MYSQL服务器环境。 二、务必设置伪静态规则&#xff0c;否则将无法访问文章栏目页面。 三、启用伪静态功能&#xff0c;请在站点设置中选择使用thinkphp的伪静态规则。 四、在域名的根目录下找到”data/config.php”文件&#xff0c;填入数据库的账号和…

石家庄自适应网站建设wordpress房地产插件

通讯网关 api网关这些年来&#xff0c;API网关正在经历一些身份危机 。 它们是否是集中的共享资源&#xff0c;从而促进了API对外部实体的公开和治理&#xff1f; 它们是集群入口哨兵&#xff0c;可以严格控制哪些用户流量进入或离开集群吗&#xff1f; 还是他们根据自己拥有…

日志清理脚本模板 - 一叶舟

日志清理脚本模板日志清理脚本模板 cat /data_log_back_bak/move_old_logs.sh #!/bin/bash# 日志源目录和备份目录LOG_DIR="/data/logs/back" TMP_DIR="/tmp" BAK_DIR="/data_log_back_bak&q…

11.备库出现gap处理方法

备库检查是否有日志缺失: select * from v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#1 99 109 从上面的信息可以看出,备库中缺失了99到109的日志。…

网站开发江西网站推广软文是什么

前言算法为王。想学好前端&#xff0c;先练好内功&#xff0c;内功不行&#xff0c;就算招式练的再花哨&#xff0c;终究成不了高手&#xff1b;只有内功深厚者&#xff0c;前端之路才会走得更远。强烈推荐 GitHub 上值得前端学习的数据结构与算法项目&#xff0c;包含 gif 图的…

完整教程:2020年_408统考_数据结构41题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[原创]《C#高级GDI+实战:从零开发一个流程图》第10章:鼠标拖动完成连线、拖动时实时显示半透明虚线连线效果、自定义连接点样式

一、前言 上节课程我们实现了连接形状不同的连接点,但在实际使用中会发现很繁琐,需要分别指定开始形状和结束形状的连接点,这明显不符合操作经验逻辑。我们本节课程就来实现鼠标拖动完成连线,拖到哪个连接点就对哪…

修改Abp中Auto API Controllers中 默认生成的 Put、Delete请求

在做公家的项目,有个奇葩的规定,Http请求 不能用Put和Delete。 怎么在使用Abp,自动生成的Api,全局修改原有规则,将修改、删除都改成Post呢? 只需要,在Host项目的XXXModule类中,重写的PreConfigureServices方法…

dedecms做网站网站界面设计分析

一、文件的基本权限权限&#xff1a;r, w, x对于文件来讲&#xff0c;r:&#xff1a;可读&#xff0c;可以使用类似cat等命令查看文件内容&#xff1b;w:可写&#xff0c;可以编辑或删除此文件&#xff1b;x:可执行&#xff0c;exacutable&#xff0c;可以命令提示符下当作命令…

博物馆网站微信公众号建设方案网站未备案 打不开

先安装MMEdu库&#xff01; MMEdu安装&#xff1a;https://blog.csdn.net/zyl_coder/article/details/132483865 下面的代码请在Jupyter上运行&#xff0c;并自己准备数据集。若模型还未训练&#xff0c;请先在本地训练完模型后再进行模型推理。 import cv2 capture cv2.Vi…

公司和公司网站的关系男孩子和男孩子在一起怎么做网站

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 单片机家电产品–OC门电路 前言 记录学习单片机家电产品内容 已转载记录为主 一、知识点 1OC门电路和OD门电路的区别 OC门电路和OD门电路的区别 OC门&#xff1a;三极管…