Java实现LeetCode(54.螺旋矩阵)

作者:莫少侠9527 时间:2023-01-26 20:54:00 

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

标签:Java,LeetCode,螺旋矩阵
0
投稿

猜你喜欢

  • MVC框架自定义实现过程

    2021-07-24 03:31:47
  • C#网络爬虫代码分享 C#简单的爬取工具

    2023-10-12 15:03:41
  • SpringBoot使用邮箱发送验证码实现注册功能

    2022-03-30 10:13:36
  • c#基础知识---委托,匿名函数,lambda

    2023-06-12 18:18:07
  • Java实现五子棋游戏

    2022-07-08 12:50:27
  • java开源区块链jdchain入门

    2022-08-07 11:44:44
  • Android购物车项目快速开发

    2021-09-11 01:28:07
  • C#事件用法实例浅析

    2023-02-24 19:22:16
  • Java实现选择排序

    2021-06-30 16:53:55
  • Mybatis Plus中的流式查询案例

    2023-08-18 16:35:13
  • 详解Android Lint的原理及其使用

    2022-12-23 16:05:47
  • Java详细讲解包的作用以及修饰符的介绍

    2021-09-14 05:27:26
  • Spring Cloud负载均衡及远程调用实现详解

    2021-10-16 01:11:27
  • c++指针使用形参改变实参的方法

    2023-03-11 22:40:21
  • C++野指针和悬空指针的实现方法

    2022-11-02 08:26:56
  • C#实现的SQL备份与还原功能示例

    2021-09-03 17:53:17
  • 详解Zookeeper基础知识

    2023-07-31 08:03:45
  • Java基于servlet监听器实现在线人数监控功能的方法

    2021-08-19 11:38:24
  • Android 实现把bitmap图片的某一部分的颜色改成其他颜色

    2022-12-28 00:12:03
  • java日期时间操作工具类

    2022-09-03 13:04:58
  • asp之家 软件编程 m.aspxhome.com