题目描述
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
代码思路:
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;
}
}