当前位置: 首页 > backend >正文

2025年- H18-Lc126-54.螺旋矩阵(矩阵)---java版

1.题目描述

在这里插入图片描述

在这里插入图片描述

2.思路*

思路1:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充2:
directions[1][0] // 表示“下”这个方向的行增量(+1)
directions[1][1] // 表示“下”这个方向的列增量(0)
int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
(1) directions[0]={0,1},directions[0][0]=0,directions[0][1]=1
(2) directions[1]={1,0},directions[1][0]=1,directions[1][1]=0
(3)directions[2]={0,-1},directions[2][0]=0,directions[2][1]=-1
(4) directions[3]={-1,0},directions[3][1]=-1,directions[3][2]=0

3.代码实现

方法一:不带测试用例

class Solution {public List<Integer> spiralOrder(int[][] matrix) {//1.定义一个List,用来存储列表中的值List<Integer> order=new ArrayList<Integer>();//2.如果遇到是空矩阵,或者是行矩阵,或者是列矩阵,直接返回当前列表if(matrix==null||matrix.length==0||matrix[0].length==0){return order;}//3.计算行数,计算列数int rows=matrix.length;int columns=matrix[0].length;//4.定义一个访问数组boolean[][] visited=new boolean[rows][columns];//5.记录总元素个数int total=rows*columns;//6.定义行值和列值int row=0;int column=0;//7.定义一个方向数组int[][] directions={{0,1},{1,0},{0,-1},{-1,0}};//8.当前的方向索引先置为0,顺序是右下左上int directionsindex=0;//9.遍历所有元素,把原有矩阵的值先添加的orde中,并将访问位置为true.for(int i=0;i<total;i++){order.add(matrix[row][column]);visited[row][column]=true;int nextRow=row+directions[directionsindex][0];int nextColumn=column+directions[directionsindex][1];//10.如果出现越界(上下左右),或者是已访问,更新方向索引的值,让它换个方向if(nextRow<0||nextColumn<0||nextRow>=rows||nextColumn>=columns||visited[nextRow][nextColumn]==true){directionsindex=(directionsindex+1)%4;}//11.更新当前行列坐标,朝当前方向继续前进row=row+directions[directionsindex][0];column=column+directions[directionsindex][1];}//12.返回结果列表return order;}
}

方法二:带测试用例

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;public class H54 {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> order=new ArrayList<Integer>();//1.如果遇到空矩阵,或者行矩阵,或者列矩阵。直接返回当前矩阵的值if(matrix==null||matrix.length==0||matrix[0].length==0){return order;}//2.求当前二维矩阵总的行和列int rows= matrix.length;int columns=matrix[0].length;//3.设计一个bool矩阵,用来存储参观过的元素boolean[][] visited=new boolean[rows][columns];//4.定义一个方向矩阵,定义从(0,0)元素开始的右下左上矩阵int[][] directions={{0,1},{1,0},{0,-1},{-1,0}};//5.定义一个方向的初始索引int directionsIndex=0;//6.计算总的矩阵元素int total=rows*columns;//7.定义当前的行值和列值int row=0;int column=0;for(int i=0;i<total;i++){//9.遍历所有元素,把原有矩阵的值先添加的order中,并将访问位置为0.order.add(matrix[row][column]);visited[row][column]=true;//10.更新下一步的方向int nextRow=row+directions[directionsIndex][0];int nextColumn=column+directions[directionsIndex][1];if(nextRow<0||nextColumn<0||nextRow>=matrix.length||nextColumn>=matrix[0].length||visited[nextRow][nextColumn]==true){directionsIndex=(directionsIndex+1)%4;}//11.更新当前行列坐标,朝当前方向继续前进row=row+directions[directionsIndex][0];column=column+directions[directionsIndex][1];}return order;}public static void main(String[] args){H54 test08=new H54();int[][] matrix={{1,2,3},{4,5,6},{7,8,9}};List<Integer> res=new ArrayList<Integer>();res=test08.spiralOrder(matrix);System.out.println("输出结果"+res);}
}
http://www.xdnf.cn/news/3590.html

相关文章:

  • 【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(上篇)
  • Android学习总结之jetpack组件间的联系
  • HTTP和HTTPS
  • IntelliJ IDEA
  • 微信小程序
  • Python集合全解析:从基础到高阶应用实战
  • 信息收集新利器:SSearch Chrome 插件来了
  • 如何理解 MCP 和 A2A 的区别?|AI系统架构科普
  • B站Michale_ee——ESP32_IDF SDK——FreeRTOS_5 事件组同步与等待
  • 驱动开发系列56 - Linux Graphics QXL显卡驱动代码分析(三)显示模式设置
  • wpf 输入框 在输入时去除水印
  • 开闭原则与依赖倒置原则区别:原类不变,新增类(功能)vs 接口类不变,原实现类可变
  • 十分钟用Docker搭建功能齐全的Poste.io邮件服务器
  • 分布式理论:常见分布式协议的概览与解析
  • 原地轮转数组的两种高效实现详解
  • 使用 Java 实现一个简单且高效的任务调度框架
  • HTTPS协议:更安全的HTTP
  • Qt通过QXlsx库文件写入到excl文件,读取excl文件
  • PowerBI实现点击空白处隐藏弹窗(详细教程)
  • pip 常用命令及配置
  • Linux发展史、开源文化与技术生态全景
  • 10 种微服务设计模式
  • python实现基于Windows系统计算器程序
  • 【Linux】Linux奇技淫巧
  • 【AI论文】Sadeed:通过小型语言模型推进阿拉伯语变音
  • (36)VTK C++开发示例 ---纹理贴图四边形
  • 【重走C++学习之路】26、类型转换
  • Python爬虫基础总结
  • [android]MT6835 Android 关闭selinux方法
  • 【自然语言处理与大模型】使用Xtuner进行QLoRA微调实操