题目
题解
简单的模拟、先是往右、再往下、再往左走,再往上走、接着再循环,我自己写的是用一个访问数组来判断有没有被访问过。
详细请看官方题解:力扣官方题解
我的代码:
public int[] spiralOrder(int[][] matrix) {
int r=0,l=0;
int rn = matrix.length;
if (rn == 0){
return new int[0];
}
int ln = matrix[0].length;
int n = rn*ln;
int[] res = new int[n];
int i = 0;
boolean[][] vis = new boolean[rn][ln];
while (i<n){
// 向右走
while (l<ln && !vis[r][l]){
vis[r][l] = true;
res[i++] = matrix[r][l];
l++;
}
l--;
// 向下走
r++;
while (r<rn && !vis[r][l]){
vis[r][l] = true;
res[i++] = matrix[r][l];
r++;
}
r--;
// 向左走
l--;
while (l>=0 && !vis[r][l]){
vis[r][l] = true;
res[i++] = matrix[r][l];
l--;
}
l++;
// 向上走
r--;
while (r>=0 && !vis[r][l]){
vis[r][l] = true;
res[i++] = matrix[r][l];
r--;
}
r++;
l++;
}
return res;
}