螺旋矩阵(java)

题目描述

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

代码思路:

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
      List<Integer> list = new ArrayList<>(); 
      int rowlen=matrix.length;
      int columnLen =matrix[0].length;
      //考虑特殊情况
      if(matrix==null||matrix.length==0){
        return list;
      }
      if(rowlen == 1){
        for(int j=0;j<columnLen;j++){
            list.add(matrix[0][j]);
        }
        return list;
      }
      if(columnLen == 1){
        for(int j=0;j<rowlen;j++){
            list.add(matrix[j][0]);
        }
        return list;
      }

      int[][] flag= new int[rowlen][columnLen];
      int i = 0;
      int j = 0;
      //0向右,1向下,2向左,3向上。
      int direction = 0 ;
      while(true){ 
        if(direction==0){//0向右
            while(j<columnLen && flag[i][j]==0){
                list.add(matrix[i][j]);
                flag[i][j]=1;
                j++;
            }
            j--;
            i++;
            direction=1;
        }
        if(direction==1){//1向下
            while(i<rowlen&& flag[i][j]==0){
                list.add(matrix[i][j]);
                flag[i][j]=1;
                i++;
            }
            i--;
            j--;
            direction=2;//向左
        }
        if(direction==2){//向左
            while(j>-1 && flag[i][j]==0){
                list.add(matrix[i][j]);
                flag[i][j]=1;
                j--;
            }
            j++;
            i--;
            direction=3;//向上
        }
        if(direction==3){//向上
            while(i>-1 && flag[i][j]==0){
                list.add(matrix[i][j]);
                flag[i][j]=1;
                i--;
            }
            i++;
            j++;
            direction=0;//向上
        }
        if(flag[i][j]==1){
            break;
        }

      }
      return list;

    }
}
相关推荐
天疆说15 分钟前
01 硬件选型与 llama.cpp 部署:4× RTX 5880 Ada 跑 DeepSeek-V4-Flash
java·redis·llama
水无痕simon1 小时前
3 短信应用场景以及平台架构
java·服务器
mister_guo1 小时前
JVM 内存管理原理及生产配置实战:从“参数能启动”到“内存可控”
java·jvm
风流 少年1 小时前
Spring AI 2.0:Tool
java·python·spring
爱敲键盘的猴子1 小时前
Java Spring -- 声明式事务控制
java·spring·事务控制
爱编程的小新☆2 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
weixin_383196472 小时前
java基础面试题@Autowired和@Resource区别
java·开发语言
evans在进步2 小时前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
Web Security Loop2 小时前
MAC卸载JDK环境
java·macos·jdk
Rain的Java大神之路3 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构