Java实现LeetCode(54.螺旋矩阵)
作者:莫少侠9527 发布时间:2023-01-26 20:54:00
标签:Java,LeetCode,螺旋矩阵
LeetCode54. 螺旋矩阵 java实现
题目
难度 中
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路
找出每个点的坐标,每个点每次延顺时针分别为右、下、左、上四个方向走一个位置,维护一个方向变量,不同方向时做相应的边界判断。每次遇到边界,必定改变方向,缩短原边界大小。
解法
public List<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> order = new ArrayList<>();
if (matrix.length == 0 || matrix[0].length == 0) {
return order;
}
int m = matrix.length;
int n = matrix[0].length;
int len = m * n;
int row = 0;
int col = 0;
int leftMin = 0;
//每次走上下左右四个方向,一次只走一格
//注意点,因为是从(1,1)开始走的,所以上界最小row是第二行1
int topMin = 1;
//初始方向值
int k = 0;
int[][] dir = {
{1, 0, -1, 0},
{0, 1, 0, -1}
};
for (int i = 0; i < len; i++) {
order.add(matrix[row][col]);
col += dir[0][k % 4];
row += dir[1][k % 4];
switch (k % 4) {
case 0:
//右
if (col > n - 1) {
col = n - 1;
row++;
k++;
n--;
}
break;
case 1:
//下
if (row > m - 1) {
row = m - 1;
col--;
k++;
m--;
}
break;
case 2:
//左
if (col < leftMin) {
col = leftMin;
leftMin++;
row--;
k++;
}
break;
case 3:
//上
if (row < topMin) {
row = topMin;
topMin++;
col++;
k++;
}
break;
}
}
return order;
}
结果
2ms 战胜99.74%
来源:https://blog.csdn.net/qq_29777823/article/details/82357113
0
投稿
猜你喜欢
- 目录1.@ 根据id更新2.@ 条件构造器作为参数进行更新3.@ lambda构造器mybatisplus update语句为null时没有
- 相信在做B/S模式的项目时,我们请求server端时通常遇到返回数据的处理,对返回数据的格式处理方式多样,随着JSON的流行,现在很多的项目
- @Profile注解详解@Profile:Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;开发环境develop
- 一、JdbcTemplateSpring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作二、实战2.1 引
- Java 利用poi把数据库中数据导入Excel效果:使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包
- 本文实例为大家分享了Android实现登录注册功能的具体代码,供大家参考,具体内容如下运行环境 Android Studio总体效果图一、
- MediaQuery通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:
- 最近开发了比较多的接口,因为没有可参考的案例,所以一开始一直按照我的理解进行开发。开发多了发现自己每个结果都写了相同的代码:try() {}
- protected 来谈谈protected访问权限问题。看下面示例1:Test.javaclass MyObject {}public c
- 前言前天工作中遇到了这样一个问题,我在接口的参数封装了一个pojo,这是很常见的,当参数一多,惯性的思维就是封装一个pojo.那么在参数前有
- 初次安装Android Studio,遇到了不少问题,这是其中的一个,分享如下,同时求各位dalao关注一下啦((*^__^*) )使用不同
- 把char数组转换成String调用reverseStr()传入一个字符串"let’s"
- 属性问题引入前面我们已经在父工程中的dependencyManagement标签中对项目中所使用的jar包版本进行了统一的管理,但是如果在标
- 1. List1.1 List 的常见方法方法描述boolean add(E e)尾插 evoid add(int index, E ele
- 简介我们在使用flutter的过程中,有时候需要控制某些组件是否展示,一种方法是将这个组件从render tree中删除,这样这个组件就相当
- 1.springboot启动过程中,首先会收集需要加载的bean的定义,作为BeanDefinition对象,添加到BeanFactory中
- 背景今天面试字节算法岗时被问到的问题,让我用C++实现一个softmax函数。softmax是逻辑回归在多分类问题上的推广。大概的公式如下:
- 首先打开 Visual Studio Installer 可以看到vs2022 只支持安装4.6及以上的版本,如图所示。那么该如何安装4.6
- 微服务开发中经常有这样的需求,公司自定义了通用的请求头,需要在微服务的调用链中转发,比如在请求头中加入了token,或者某个自定义的信息un
- 一、导航栏UINavigationBar1、导航栏的使用在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigati