【矩阵】【中等】螺旋矩阵

题目

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

输入:matrix = \[1,2,3,4,5,6,7,8,9]

输出:1,2,3,6,9,8,7,4,5
示例 2:

输入:matrix = \[1,2,3,4,5,6,7,8,9,10,11,12]

输出:1,2,3,4,8,12,11,10,9,5,6,7
提示:

m == matrix.length

n == matrixi.length

1 <= m, n <= 10

-100 <= matrixij <= 100

四个边界值

定义四个边界,如下图所示,走完一圈之后,四个边界同时向里面缩。

  • 当up<down,或者left>right的时候说明螺旋结束。
java 复制代码
                 up = 0
                   ↓
          left →  1   2   3   4  ← right
                  5   6   7   8
                  9  10  11  12
                   ↑
                down = 2
java 复制代码
public static List<Integer> spiralOrder(int[][] matrix) {
    List<Integer> list = new ArrayList<>();
    int up = 0;
    int down = matrix.length-1;
    int left = 0;
    int right = matrix[0].length-1;
    while(true) {
        for(int i = left; i<=right; i++) {
            list.add(matrix[up][i]);
        }
        up++;
        if(up>down) {break;}
        for(int i = up; i<=down; i++) {
            list.add(matrix[i][right]);
        }
        right--;
        if(right<left) {break;}
        for(int i = right; i>=left; i--) {
            list.add(matrix[down][i]);
        }
        down--;
        if(up>down) {break;}
        for(int i = down; i>=up; i--) {
            list.add(matrix[i][left]);
        }
        left++;
        if(right<left) {break;}
    }
    return list;
}

注意每一次边界值变动都要判别,否则可能导致下一步添加新的数字(up>down已经可以跳出,但是 left 和 right 还会在添加数字)

相关推荐
Angel Q.14 小时前
协方差矩阵:3DGS 里“椭球的形状说明书“
线性代数·3d·矩阵
BSD_HY1 天前
智能家居中控面板的结构暗战:薄膜开关为什么还没退场
矩阵·智能家居·薄膜开关·源头工厂
茉莉玫瑰花茶2 天前
线性代数 [ 矩阵与线性变化 ]
线性代数·math·1024程序员节
茉莉玫瑰花茶2 天前
线性代数 [ 矩阵乘法与线性变换复合的联系 ]
python·线性代数·math
莫叫石榴姐2 天前
半导体业务数仓建模: Lot、Wafer、Die、Recipe、OEE、YMS 建模要点
数据仓库·sql·面试·职场和发展·矩阵·1024程序员节
茉莉玫瑰花茶2 天前
线性代数 [ 序言 ]
线性代数·math·1024程序员节
茉莉玫瑰花茶3 天前
线性代数 [ 线性组合·张成的空间与基 ]
线性代数·math·1024程序员节
茉莉玫瑰花茶3 天前
线性代数 [ 向量究竟是什么 ]
线性代数·math·1024程序员节
reikocao4 天前
IMU预积分误差模型推导:协方差传播、残差构建、雅可比矩阵
人工智能·线性代数·矩阵
TK泰妞4 天前
TikTok 带货素材如何批量测试?从参考视频到内容矩阵的实操方法
线性代数·矩阵·音视频