Leetcode Hot 100刷题记录 -Day15(螺旋矩阵)

devtools/2025/1/15 15:06:39/

螺旋矩阵

问题描述:

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

 

示例 1:

bd0a154e535b2f1a08da6ecb84105933.jpeg

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

92276976b87d4423915b1b51b9c0f97e.png

示例 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]

思路分析:

  • 采用伴随矩阵visited来标记已经遍历过的元素

  • 使用方向矩阵directions来控制移动方

java">//提交版
class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 创建储存顺时针的列表List<Integer> order = new ArrayList<>();if (matrix == null || matrix.length == 0 || matrix[0].length == 0){return order;}int rows = matrix.length;int columns = matrix[0].length;boolean[][] visited = new boolean[rows][columns];int total = rows * columns;int row = 0;int 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];int nextcolumn =column + directions[directionIndex][1];if (nextrow<0||nextrow>=rows||nextcolumn<0||nextcolumn>=columns||visited[nextrow][nextcolumn])directionIndex = (directionIndex+1)%4;row = row + directions[directionIndex][0];column = column + directions[directionIndex][1];}return order;}
}//带有输入输出版
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class hot_16spiralOrder {public List<Integer> spiralOrder(int[][] matrix){// 创建储存顺时针的列表List<Integer> order = new ArrayList<>();if (matrix == null || matrix.length == 0 || matrix[0].length == 0){return order;}int rows = matrix.length;int columns = matrix[0].length;boolean[][] visited = new boolean[rows][columns];int total = rows * columns;int row = 0;int 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];int nextcolumn =column + directions[directionIndex][1];if (nextrow<0||nextrow>=rows||nextcolumn<0||nextcolumn>=columns||visited[nextrow][nextcolumn])directionIndex = (directionIndex+1)%4;row = row + directions[directionIndex][0];column = column + directions[directionIndex][1];}return order;}public static void main(String[] args){int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};System.out.println("输入:" + Arrays.deepToString(matrix));hot_16spiralOrder hot16spiralOrder = new hot_16spiralOrder();List<Integer> result = hot16spiralOrder.spiralOrder(matrix);System.out.println("输出" + result);}
}

知识点总结:

  • 方向矩阵的计算方式:directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

directionIndex = (directionIndex +1)% 4

directionIndex = 0:表示向右移动 (0, 1)

directionIndex = 1:表示向下移动 (1, 0)

directionIndex = 2:表示向左移动 (0, -1)

directionIndex = 3:表示向上移动 (-1, 0)

 

865517efb5eb44e9a8249a87cb901537.jpeg

 


http://www.ppmy.cn/devtools/111909.html

相关文章

【网络安全】漏洞挖掘之会话管理缺陷

未经许可,不得转载。 文章目录 正文正文 目标:example.com 该站点允许存在主要邮箱和次要邮箱。 在尝试使用次要邮箱和密码登录时,由于账户最初是通过主邮箱创建的,无法登录。于是,我通过次要邮箱使用Google OAuth进行登录。令人意外的是,我成功通过Google OAuth登录了…

故障诊断迁移学习项目DDC(保姆教程)

本项目从零开始搭建深度领域混淆&#xff08;Deep Domain Confusion&#xff0c;DDC&#xff09;算法。项目包括加载CWRU轴承原始信号&#xff0c;信号处理、数据集制作&#xff0c;模型搭建&#xff0c;DDC域混淆算法设计、特征可视化&#xff0c;混淆矩阵等流程来帮助读者学习…

打工人必备,一键完成 PDF 文档内容提取,帮你实现工作效率翻倍!!

MinerU 是一款将 PDF 转化为机器可读格式的工具&#xff08;如 markdown、json&#xff09;&#xff0c;可轻松提取为任何格式。支持 176 种语言的准确识别&#xff0c;进行精准的语言类型鉴定。 它专门设计用于将包含图片、公式、表格、脚注等复杂多模态 PDF 文档转化为清晰、…

Unity实现自己的协程系统

为什么自己实现一套协程系统 协程&#xff08;Coroutine&#xff09;是一个强大且灵活的工具&#xff0c;它可以帮助开发者处理异步任务&#xff0c;例如等待某些事件、处理逐帧更新等。在Unity中&#xff0c;协程通常通过IEnumerator来实现&#xff0c;这种机制允许代码在执行…

ST官方 VSCode 插件安装及配置工程参考

写在前头 VSCode的用法和插件是月初参加ST官方北京站举办的线下培训中&#xff0c;厂家AE工程师给我们讲的&#xff0c;不同于已经很多人用的&#xff08;并且一直在吵的&#xff09;keil assistant什么的&#xff0c;用的是CMake编译&#xff0c;抛弃了原有的keil&#xff0c;…

前端用html写excel文件直接打开

源码 <html xmlns:o"urn:schemas-microsoft-com:office:office" xmlns:x"urn:schemas-microsoft-com:office:excel" xmlns"http://www.w3.org/TR/REC-html40"> <head><meta charset"UTF-8"><!--[if gte mso 9]&…

最大余额法,解决百分比计算相加不等于100%(扇形/饼图百分比使用的此算法)

在开发项目的过程中有时候需要进行计算百分比&#xff0c;例如计算饼状图百分比。有时候在计算的过程中常规四舍五入计算会发生所有计算的值相加不等于100%的情况 这是 get_percent_value 函数的 JavaScript 版本&#xff1a; /*** 最大余额法&#xff0c;解决百分比计算相加不…

JAVAWeb-Servlet

一 Servlet简介 1.1 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源. 例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Ser…