输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0 || matrix == null){
return new int[0];
}
ArrayList<Integer> ans=new ArrayList<>();
int flag=1;
int x=0;
int y=0;
boolean[][] vis=new boolean[matrix.length][matrix[0].length];
while(ans.size()<matrix.length*matrix[0].length){
if(x<0 || x>=matrix.length || y<0 || y>=matrix[0].length || vis[x][y]){
if(flag==1){
flag=2;
y--;
x++;
}else if(flag==2){
flag=3;
x--;
y--;
}else if(flag==3){
flag=4;
y++;
x--;
}else{
flag=1;
x++;
y++;
}
}else{
ans.add(matrix[x][y]);
vis[x][y]=true;
if(flag==1){
y++;
}else if(flag==2){
x++;
}else if(flag==3){
y--;
}else{
x--;
}
}
}
int len=ans.size();
int[] array=new int[len];
for(int i=0;i<len;i++){
array[i]=ans.get(i);
}
return array;
}
}