54. 螺旋矩阵

题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

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

代码:                              //另外一种思路是用四个指针l,r,u,d代表左右上下,每圈添加时圈中最外的四个位置,这样更好判断

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        var list=new ArrayList<Integer>();
        int m=matrix.length;
        int n=matrix[0].length;
        int k=(Math.min(n,m)+1)/2;   //k代表循环多少圈
        int row,col;   
        for(int i=0;i<k;++i){            
            row=i;
            col=i;
            //上面行放入
            while(row==i&&col<n-i){
                list.add(matrix[row][col]);
                ++col;
            }
            --col;
            ++row;
            //右列
            while(col==n-1-i&&row<m-i){
                list.add(matrix[row][col]);
                ++row;
            }
            --row;
            --col;
            //下行
            while(row==m-1-i&&col>=i){
                if(row==i){break;}       //判断这行是不是再前面走过了 ,因为有时候就剩最后一行或一列,所以最后一行或一列单独判断
                list.add(matrix[row][col]);
                --col;
            }
            ++col;
            --row;
            //左列
             while(col==i&&row>i){
                 if(col==n-1-i){break;}  //判断这列是不是再前面走过了
                list.add(matrix[row][col]);
                --row;
            }
        }
        return list;
    }
}

 

posted @   堤苏白  阅读(121)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示