思路:模拟。
根据题目要求模拟即可。
注意几点:首先需要判断下一个数能不能转向,还有需要判断什么时候旋转结束。
第一个问题可以用标志数组来标记已经遍历过的数组,同时我们在判断的时候一定是需要先判断一下下一个是否满足旋转条件,再去标记。
第二个问题可以用一个变量记录目前的遍历个数,一旦超过了数组的元素个数,那么就会停止。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
boolean [][]flag=new boolean[110][110];
int x=-1,y=0;
List<Integer>list=new ArrayList<Integer>();
int cnt=0;
while(cnt!=matrix.length*matrix[0].length){
while(!flag[y][x+1]&&x!=matrix[0].length-1){
x++;
flag[y][x]=true;
list.add(matrix[y][x]);
cnt++;
}
while(!flag[y+1][x]&&y!=matrix.length-1){
y++;
flag[y][x]=true;
list.add(matrix[y][x]);
cnt++;
}
while(x>0&&!flag[y][x-1]){
x--;
flag[y][x]=true;
list.add(matrix[y][x]);
cnt++;
}
while(y>0&&!flag[y-1][x]){
y--;
flag[y][x]=true;
list.add(matrix[y][x]);
cnt++;
}
}
return list;
}
}