题目描述
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
题目分析
这个题目重要的是怎么控制方向
Java代码
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if(matrix.length==0){
return res;
}
int[] x_dir = new int[]{0,1,0,-1};
int[] y_dir = new int[]{1,0,-1,0};
int dir = 0;
int x_cur=0,y_cur=0;
int up_x = 0,left_y = 0;
int m = matrix.length,n=matrix[0].length;
int down_x = m-1,right_y = n-1;
int count = 0;
while(count < m*n){
count++;
res.add(matrix[x_cur][y_cur]);
if(dir==0 && y_cur==right_y){
up_x++;
dir = (dir+1)%4;
}
if(dir==1 && x_cur==down_x){
right_y--;
dir = (dir+1)%4;
}
if(dir==2 && y_cur==left_y){
down_x--;
dir = (dir+1)%4;
}
if(dir==3 && x_cur==up_x){
left_y++;
dir = (dir+1)%4;
}
x_cur += x_dir[dir];
y_cur += y_dir[dir];
}
return res;
}