[Java][Leetcode middle] 54. 螺旋矩阵

官解

采用四个变量分别记录上下左右

然后根据循环方向分别移动一格,然后判断是否需要退出循环。

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return res;

        int top = 0;
        int bottom = matrix.length - 1;
        int left = 0;
        int right = matrix[0].length -1;

        while(true){
            // 左到右
            for(int i = left; i<=right ;i++) res.add(matrix[top][i]);
            // 向下一格并判断是否超出边界
            if(++top > bottom) break;

            // 上到下
            for(int i = top; i<=bottom;i++)  res.add(matrix[i][right]);
            // 左
            if(--right < left) break;

            // 右到左
            for(int i = right; i>=left;i--)  res.add(matrix[bottom][i]);
            // 上
            if(--bottom < top) break;

            // 下到上
            for(int i = bottom; i>=top;i--)  res.add(matrix[i][left]);
            // 右
            if(++left > right) break;
        }

        return res;
    }
}
相关推荐
tachibana23 小时前
hot100 课程表(207)
java·数据结构·算法·leetcode
神仙别闹3 小时前
编写基于C++ Huffman 算法的无损压缩程序和解压程序
java·c++·算法
IT乐手3 小时前
Android 写本地日志工具类
android·java
阿维的博客日记3 小时前
spring里面的@RequestParam什么意思
java·后端·spring
laowangpython3 小时前
昆仑通态 Mcgs Pro软件安装步骤(附安装包)Mcgs Pro 3.3.6 下载安装教程(保姆级)
java·服务器·数据库·其他
旖-旎3 小时前
《LeetCode 646 最长数对链 || LeetCode 1143 最长公共子序列》
c++·算法·leetcode·动态规划
Frostnova丶3 小时前
(15)LeetCode 189. 轮转数组
数据结构·算法·leetcode
罗超驿4 小时前
6.Java LinkedList深度解析:从链表原理到源码实践
java·开发语言·链表
2501_948106914 小时前
计算机毕业设计之jsp物业管理系统
java·大数据·开发语言·汽车·课程设计
黑taoA4 小时前
深度解析:Maven核心命令(clean、compile、package、install)与IDEA多模块项目避坑指南
java·maven·intellij-idea