[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;
    }
}
相关推荐
白白白小纯7 分钟前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
编程风暴8 分钟前
3类人群的数据分析实习类型选择+4条选错红线
java·前端·数据分析
钱六两17 分钟前
Spring AI 使用 MCP 客户端(调用高德 MCP)
java·人工智能·spring
城管不管25 分钟前
RabbitMQ死信队列
java·分布式·ai·面试·职场和发展·rabbitmq·agent
long31631 分钟前
Java 团队入门到精通学习资料
java·开发语言
vx-程序开发34 分钟前
【java项目分享】springboot农产品销售平台14952
java·javascript·spring boot·python·eclipse·django·php
程序员良辰44 分钟前
【TongWeb7】启动接近两分钟问题排查
java·开发语言·中间件
八角.。1 小时前
Java案例-学生管理系统
java
粉色大象1 小时前
线性代数入门:行列式与矩阵全解析
线性代数·矩阵
zander2581 小时前
35. 搜索插入位置:从边界语义理解二分查找
数据结构·算法·leetcode