Java实现LeetCode(螺旋矩阵)

网友投稿 245 2023-01-01

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 spiralOrder(int[][] matrix) {

ArrayList 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%

到此这篇关于Java实现LeetCode(螺旋矩阵)的文章就介绍到这了,更多相关Java实现螺旋矩阵内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网站api接口地址购买(网站api获取)
下一篇:半小时实现Java手撸网络爬虫框架(附完整源码)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~