[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;
    }
}
相关推荐
pursuit_csdn1 小时前
力扣周赛 501
算法·leetcode·职场和发展
AbandonForce1 小时前
LeetCode 滑动窗口个人思路详解
算法·leetcode·职场和发展
ooseabiscuit1 小时前
Laravel6.x新特性全解析
java·开发语言·后端·mysql·spring
Liangwei Lin1 小时前
LeetCode 45. 跳跃游戏 II
数据结构·算法·leetcode
青山师1 小时前
Java内存模型深度解析:Happens-Before规则与内存屏障实现原理
java·spring·面试·职场和发展·java程序员·jmm
Seven971 小时前
万字长文背诵最新Agent常见试题
java
XiYang-DING1 小时前
【Java EE】网络通信中的 4 种交互模式
java·java-ee·交互
xinhuanjieyi1 小时前
vscode插件,.sec / .inc / .sc 文件添加关键字高亮
java·服务器·vscode
Mr_pyx1 小时前
RAG知识库从零到一:简单搭建教程(java版)
java·spring·ai·rag