题目信息
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
解题思路:
螺旋矩阵的顺序是下图这样的,可以根据x,y轴的1或者0来判断此时矩阵的方向是什么。可以定义一个布尔数组,大小和题目数组一样,如果走过了就将false改为ture,代表走过了。在走到下一个坐标前需要判断坐标是否合法。是否合法取决于方向是不是正确,有没有超过数组大小,有没有用过。如果走完了一个方向那就接着换一个方向。直到遍历完所有。
实现代码:
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list=new ArrayList<> ();
if(matrix==null || matrix.length==0){
return list;
}
//定义方向数组 x:0,1,0,-1 y:1.0.-1.0
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int n=matrix.length;
int m=matrix[0].length;
boolean used[][]=new boolean[n][m];
for(int i=0,x=0,y=0,d=0;i<n*m;i++){
list.add (matrix[x][y]);
used[x][y]=true;
//检验下一个位置是否合法
int a=x+dx[d];
int b=y+dy[d];
if(a<0 || a>=n || b<0 || b>=m ||used[a][b]){
//不合法了 换方向
d++;
d%=4;
a=x+dx[d];
b=y+dy[d];
}
x=a;
y=b;
}
return list;
}