[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;
    }
}
相关推荐
z落落8 分钟前
C# 构造函数(无参/有参/重载/this)+析构函数(终结器)|GC 垃圾回收
java·开发语言·c#
武子康8 分钟前
Java-12 深入浅出 MyBatis 二级缓存详解:跨 SqlSession 共享与失效机制
java·后端
考虑考虑17 分钟前
JDK9中的Set.of()使用注意
java·后端·java ee
吃好睡好便好19 分钟前
矩阵的转置运算
学习·线性代数·matlab·矩阵
plainGeekDev20 分钟前
findViewById → ViewBinding
java·kotlin·gradle
yz_aiks27 分钟前
IDEA终端配置oh-my-zsh实战:安装、插件与日常使用技巧
java·ide·intellij-idea
Refrain_zc28 分钟前
Android 老设备存储空间展示:机身存储 + TF 卡容量获取完整实现
java
java1234_小锋33 分钟前
LangChain4j 开发Java Agent智能体- HelloWorld 实现
java·langchain4j
RainCity36 分钟前
Java Swing 自定义组件库分享(十)
java·笔记·后端
段ヤシ.37 分钟前
回顾Java知识点,面试题汇总Day18(持续更新)
java·网络编程·反射