解题思路:
1.定义一个list,旋转遍历给定的矩阵,并将矩阵的元素,添加进list集合。
2.定义矩阵长的最大值,最小值
3.定义矩阵宽的最大值,最小值
4.当宽为最小值,长不为最大值时,长++;(向右遍历)
5.当长为最大值,宽不为最大值时,宽++;(向下遍历)
6.宽为最大值时,长不为最最小值时,长–(向左遍历)
7.长为最最小值时,宽不为最小值+1时,宽–(向上遍历)
8.这时已遍历一圈,然后给所有的值重新赋值,进入内圈,依次完成遍历。具体见代码,非常容易理解。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> list=new ArrayList<Integer>();
if(matrix.length==0){
return list;
}
final int M=matrix.length;
final int N=matrix[0].length;
final int MAX=M*N;
int x=0,y=0;
int XMIN=0,YMIN=0;
int XMAX=M-1,YMAX=N-1;
for(int i=0;i<MAX;i++){
list.add(matrix[x][y]);
if(x==XMIN&&y!=YMAX){
y++;
}else if(y==YMAX&&x!=XMAX){
x++;
}else if(x==XMAX&&y!=YMIN){
y--;
}else if(y==YMIN&&x!=XMIN+1){
x--;
}else if(x==XMIN+1&&y==YMIN){
XMIN=XMIN+1;
YMIN=YMIN+1;
XMAX=XMAX-1;
YMAX=YMAX-1;
x=XMIN;
y=YMIN;
}
}
return list;
}
}